Olá Pessoal,
É o seguinte:
Recém estou iniciando com ireport. E agora eu quero capturar um parametro de uma aplicação Swing. Para isso, importei as livrarias correspondentes. Mas o que não estou conseguindo é mostrar o informe gerado.
Segue o código:
Código de chamada:
ExportarInforme informe = new ExportarInforme();
informe.exportar();
Clase ExportarInforme:
package pacote;
import java.io.InputStream;
import java.lang.ClassLoader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;
/**
*
* @author usuario
*/
public class ExportarInforme {
private Connection connection = null;
public ExportarInforme() {
this.conectar();
}
private void conectar() {
try {
String usuario = "user";
String clave = "clave";
Class.forName("net.sourceforge.jtds.jdbc.Driver");
String url = "jdbc:jtds:sqlserver://servidor/BD";
this.connection = DriverManager.getConnection(url, usuario, clave);
if (connection != null) {
System.out.println("Conexión OK");
}
} catch (SQLException a) {
a.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
System.exit(1);
}
}
private void desconectar() {
try {
this.connection.close();
} catch (SQLException ex) {
Logger.getLogger(ExportarInforme.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void exportar() {
try {
ClassLoader cl = this. getClass(). getClassLoader();
InputStream is =(cl.getResourceAsStream("files/informe.jasper"));
Map parametros = new HashMap();
parametros.put("area", "rrhh");
//aqui lança o NULL!!
JasperPrint jasperPrint = JasperFillManager.fillReport(is, parametros,this.connection);
JasperViewer jviewer = new JasperViewer(jasperPrint, false);
jviewer.setVisible(true);
} catch (Exception j) {
System.out.println("Mensaje de Error:" + j.getMessage());
j.printStackTrace();
} finally {
this.desconectar();
}
}
}
Acho que estou fazendo tudo conforme. No .jasper o parametro area está registrado e está dentro de uma Query:
select * from tabela where tabela.area = $P{area}
O output:
java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:361)
A versão tanto do jasper como do ireport é a 3.0.0, e estou usando o netbeans 6.1. e o JDK 6 update 10.
Obrigado de antemão.
SOLUÇÃO:
- Incluir todas as bibliotecas necesarias (.jar) do jasperreports e do ireport no netbeans. As que inlcluí foram:
- commons-digester-1.7.jar
- commons-collections-2.1.jar
- commons-logging-1.0.2.jar
- itext-1.3.1.jar
- poi-3.0.1-FINAL-20070705.jar
- jasperreports-3.0.0.jar
- iReport.jar
- jdt-compiler-3.1.1.jar (esta não estava mencionada nos tutoriais)
todas a bibliotecas foram tiradas do diretorio \lib do iReport.
Obs: funcionou colocando o .jasper direto no C:\ , para colocar numa pasta dentro do projeto netbeans, eu coloquei o seguinte:
InputStream inputStream = new FileInputStream( "./src/pasta/informe.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parametros, this.conn);
Espero que sirva para alguém.