Erro no JasperReport

2 respostas
S

Oi..

Seguindo o Tutorial de [url]http://www.guj.com.br/content/articles/reports/JasperReportsIReport.pdf[/url]

Segui a risca esse tutorial, mas estou sem sucesso para gerar o relatório a partir de uma classe java. Pelo iReport ele funciona normalmente, mas quero chamar a essa classe para gerar o relatório.

Código

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.view.JasperViewer;

public class Relatorio {
	
	private static Connection getConnection( ) throws
	ClassNotFoundException, SQLException
	{
		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost/sergio_aliados";
		String user = "root";
		String password = "";
		Class.forName(driver);
		Connection con = DriverManager.getConnection( url, user, password );
		return con;
	}
	/* Gera Relatorio e visualiza-o */
	public void geraRelatorio( ) throws JRException, Exception
	{
		Connection con = getConnection( );
		Statement stm = con.createStatement( );
		String query = "select * from aliados";
		ResultSet rs = stm.executeQuery( query );
		/* implementação da interface JRDataSource para DataSource ResultSet */
		JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
		/* HashMap de parametros utilizados no relatório. Sempre instanciados */
		Map parameters = new HashMap();
		//parameters.put("COLUNA", valor);
		/* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint */
		JasperFillManager.fillReportToFile( "Relatorio.jasper", parameters, jrRS );
		/* Exporta para o formato PDF */
		JasperExportManager.exportReportToPdfFile( "Relatorio.jrprint" );
		/* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem
		 a necessidade do .jrprint */
		//JasperRunManager.runReportToPdfFile("BibliotecaPessoal.jasper", parameters, jrRS);
		/* Visualiza o relatório em formato PDF */
		JasperViewer.viewReport( "Relatorio.pdf", false );
	}
	public static void main(String[] args) throws JRException, Exception
	{
		new Relatorio().geraRelatorio();
	}
}

Erros

Exception in thread "main" java.lang.ExceptionInInitializerError
at net.sf.jasperreports.engine.fill.JRBaseFiller.createDatasets(JRBaseFiller.java)
at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:373)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:92)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:74)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:147)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:83)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:492)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:448)
at Relatorio.geraRelatorio(Relatorio.java:41)
at Relatorio.main(Relatorio.java:52)
Caused by: org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException
at org.apache.commons.logging.LogFactory.newFactory(LogFactory.java:558)
at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:355)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:390)
at org.apache.commons.javaflow.bytecode.Stack.(Stack.java:35)
... 11 more
Caused by: java.lang.NullPointerException
at org.apache.commons.logging.LogFactory.newFactory(LogFactory.java:543)
... 14 more

Grato Fabiano...

2 Respostas

_fs

http://www.guj.com.br/posts/list/25301.java
É estranha a solução que o cara apresentou, mas não custa tentar.

E mais importante que isso, a não ser que deseje receber OutOfMemoryErrors em breve, recomendo que feche os recursos caros que abre para gerar o relatório:

Connection conn = null;
Statement stm = null;
ResultSet rs = null;
try {
    // realiza o processamento todo que faz acima
}
catch( Exception e ) {
    e.printStackTrace();
}
finally {
    if( rs != null )
        try { rs.close(); } catch( Exception ex ) { ex.printStackTrace(); }
    if( stm != null )
        try { stm.close(); } catch( Exception ex ) { ex.printStackTrace(); }
    if( conn != null )
        try { conn.close(); } catch( Exception ex ) { ex.printStackTrace(); }
}

Há maneiras para o código ficar mais bonito evitando esse monte de try…catch, mas por hora faça assim.

S

Continua dando o mesmo erro.

Em outro forum um rapaz pediu para que eu colocasse o caminho inteiro aonde está o meu .jasper. Coloquei, mas nao adiantou nada.

As variáveis de ambiente do usuário deo windows estão todas aí.
Será que esse é o problema?

Só tem essas.

ANT_HOME
C:\Arquivos de programas\apache-ant-1.6.5

JASPERREPORT_HOME

C:\Arquivos de programas\JasperSoft\

JAVA_HOME

C:\Arquivos de programas\Java\jdk1.5.0_06

PATH

%JAVA_HOME%\bin;%ANT_HOME%\bin;%JASPERREPORT_HOME%\iReport-1.2.2\jasperreports-1.2.2.jar;%JASPERREPORT_HOME%\iReport-1.2.2\lib;%ANT_HOME%\lib

Grato

Criado 5 de maio de 2006
Ultima resposta 5 de mai. de 2006
Respostas 2
Participantes 2