Está ocorrendo o seguinte erro na minha compilação:
Exception in thread "main" java.lang.NullPointerException
at br.com.supercred.consultas.Relatorio.geraRelatorio(Relatorio.java:38)
at br.com.supercred.consultas.Relatorio.main(Relatorio.java:44)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)
MINHA CLASSE É :
public class Relatorio {
private Connection getConnection() throws ClassNotFoundException, SQLException{
String url = "jdbc:mysql://localhost:3306/bd_supercred";
Class.forName( "com.mysql.jdbc.Driver" );
return (Connection) DriverManager.getConnection(url, "root", "root" );
}
/* Gera Relatorio e visualiza-o */
public void geraRelatorio( ) throws JRException, Exception {
Connection con = getConnection( );
Statement stm = con.createStatement( );
String query = "select * from tb_pmmg";
ResultSet rs = stm.executeQuery( query );
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
Map parameters = new HashMap();
String str = this.getClass().getResource("pmmgrelatorios.jasper").getFile();//ERRO AQUI
JasperFillManager.fillReportToFile( str , parameters, jrRS );
JasperExportManager.exportReportToPdfFile( "pmmgrelatorios.jrprint" );
JasperViewer.viewReport( "pmmgrelatorios.pdf", false );
}
public static void main(String[] args) throws JRException, Exception {
new Relatorio().geraRelatorio();
}
}
Se tiver outro jeito de fazer relatórios, peço gentilmente a ajuda.
o que retorna this.getClass().getResource(“pmmgrelatorios.jasper”).getFile(); ? esse pmmgrelatorios.jasper existe?
flw
THIAGOANALISTA
sim, o .jasper existe está na raíz do projeto, não sei porque não encontra ele, segui um tutorial que encontrtei, estou tentando aqui, mas não estou conseguindo, será que tem me ajudar dando um exemplo de como gerar o relatório na aplicação Java? OBs: no Ireport está funcionando corretamente.
tinorberto
pode ser problema no caminho, coloque o caminho absoluto do report para testar…
NAO FUNCIONOU!!! TEM UM JEITO MAIS FÁCIL DE DESENVOLVER UM RELATÓRIO?
tinorberto
que isso… eu acho q esse é o jeito mais facil de desenvolver relatorios, se vc der um print em str imprime oq?
THIAGOANALISTA
Mudei minha classe, mas está dando erro, no ireport eu consigo gerar o relatório, funciona perfeitamente, minha classe:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.supercred.consultas;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;importjava.sql.SQLException;importjava.util.HashMap;importjava.util.Map;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JRResultSetDataSource;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.view.JasperViewer;publicclassRelatorio4{/* Driver do banco de dados, URL, usuário e senha do banco de dados */staticfinalStringJDBC_DRIVER="com.mysql.jdbc.Driver";staticfinalStringDATABASE_URL="jdbc:mysql://localhost:3306/bd_supercred";staticfinalStringUSER="root";staticfinalStringPASSWORD="root";/* Conecta-se ao banco de dados e retorna o objeto da conexão */privatestaticConnectiongetConnection()throwsClassNotFoundException,SQLException{/* Carrega o driver do postgreSQL */Class.forName(JDBC_DRIVER);/* Cria um objeto de conexão */Connectionconnection=DriverManager.getConnection(DATABASE_URL,USER,PASSWORD);returnconnection;}/* Gera relatório */publicvoidgerarRelatorio()throwsJRException,Exception{/* Chama o método getConnection para obter um objeto Connection,utiliza-o para obter um objeto Statement e realiza uma consultaarmazendo o resultado em um ResultSet*/Connectionconnection=getConnection();Statementstatement=connection.createStatement();ResultSetresult=statement.executeQuery("SELECT * FROM banco;");/* Cria um JRResultSetDataSource com o resultado da consulta */JRResultSetDataSourcejrrs=newJRResultSetDataSource(result);/* Cria um HashMap com parâmetros do relatório.Caso não seja atribuído algum valor aos parâmetros estesassumem o valor padrão.*/Mapparametros=newHashMap();/* Cria um arquivo .jrprint (relatório preenchido) utilizando oRelatorio.jasper (design), os parâmetros e oJRResultSetDataSource que é o resultado da consulta.*/JasperPrintjp=JasperFillManager.fillReport("c:\\bancos.jasper",parametros,jrrs);/* Exibe o relatório */JasperViewer.viewReport(jp);}publicstaticvoidmain(String[]args)throwsJRException,Exception{newRelatorio4().gerarRelatorio();}}
ResultSetrs=st.executeQuery("SELECT banco.`codigo` AS banco_codigo,banco.`nome` AS banco_nome,banco.`cidade` AS banco_cidade,banco.`estado` AS banco_estado FROM `banco` banco ORDER BY banco.`nome`");
Não sei porque não consegue acessar meu arquivo.jasper, tentei o caminho absoluto, mudei de lugar, não adianta, aff, o que será isso?
zoren
Cara, não faço a menor idéia do que está acontecendo
Mas o seu arquivo jrxml compila normalmente?
Não tem nenhum caractere estranho nele?
vai no arquivo pelo prompt de comando e fz type relatorio.jrxml
Esse erro de sequencia inválida, eu tive uma vez qdo eu tinha um arquivo com um caractere que só aparecia pelo prompt de comando, ele me deu um dia de dor de cabeça, e pior q era o primeiro caractere