Salve Pessoal,
Estou com um problema em uma aplicação Swing onde uso o Jasper para a geração dos relatórios PDF. No NetBeans tudo funciona perfeitamente, mas quando gero o Jar e tento executá-lo, a aplicação não encontra o arquivo jasper para a geração do relatório. Alguém já enfrentou este problema? O diretório com os arquivos do jasper está na raiz dos pacotes da aplicação. Alguma sugestão?
Obrigado,
celso
Voce empacotou os arquivos do jasper (.jasper) junto com o seu JAR?
Pelo menos se voce tem um projeto com os arquivos jasper dentro dele voce pode chamar por caminho relativo. Exemplo;
Projeto
src
br.com.portaljava.relatorios (todos os seus arquivos jasper)
chamando um arquivo
String pagina = "./src/br/com/portaljava/relatorios/nome_da_pagina.jasper"
//.... executa pelo viewer
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
<code>
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com
santacasa\relatorios\FichaAtendimento.jasper
</code>
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
<code>
String relatorio = “/br/com/santacasa/relatorios/FichaAtendimento”;
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
“Visualização do Relatório”, true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
</code>
Alguma outra idéia?
Obrigado,
celso
[quote]
[/quote]
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
<code>
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com
santacasa\relatorios\FichaAtendimento.jasper
</code>
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
<code>
String relatorio = “/br/com/santacasa/relatorios/FichaAtendimento”;
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
“Visualização do Relatório”, true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
</code>
Alguma outra idéia?
Obrigado,
celso
[quote]
[/quote]
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com\
santacasa\relatorios\FichaAtendimento.jasper
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Alguma outra idéia?
Obrigado,
celso
[quote=“jcfreire”]Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com\
santacasa\relatorios\FichaAtendimento.jasper
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Alguma outra idéia?
Obrigado,
celso[/quote]
Olá!
Algum amigo uma vez passou por um problema parecido… resolvemos passando um classloader diferente em algum ponto…
mas o classloader que utilizamos foi o
Thread.currentThread().getContextClassLoader()
acho que utilizamos o classloader para dar um load no stream do arquivo do jasper… e passava o stream para o engine do jasper…
da uma olhada ae…
abraços
[quote=“jcfreire”]Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com\
santacasa\relatorios\FichaAtendimento.jasper
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Alguma outra idéia?
Obrigado,
celso[/quote]
Olá!
Algum amigo uma vez passou por um problema parecido… resolvemos passando um classloader diferente em algum ponto…
mas o classloader que utilizamos foi o
Thread.currentThread().getContextClassLoader()
acho que utilizamos o classloader para dar um load no stream do arquivo do jasper… e passava o stream para o engine do jasper…
da uma olhada ae…
abraços
Ola Dennys, veja a configuração dos caminhos do seu projeto, as vezes voce tem que ficar tentando um monte de vezes até descobrir a causa real do seu problema, mas empacotei uma aplicação de teste aqui num arquivo JAR e funcionou corretamente.
String relatorio = "./src/br/com/santacasa/relatorios/FichaAtendimento.jasper";
// ou FichaAtendimento é um diretorio ou arquivo jasper?
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: \br\com\
santacasa\relatorios\FichaAtendimento.jasper
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio + ".jasper");
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Alguma outra idéia?
Obrigado,
celso
[/code]
String relatorio = “./src/br/com/santacasa/relatorios/FichaAtendimento.jasper”;
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
“Visualização do Relatório”, true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
JasperReport relatoriosJasper = (JasperReport) JRLoader.
loadObject(relatorio);
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
[code]
Teria que funcionar.[/code]
Olhando a API lembrei como foi feito… olha ae…
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento";
ClasLoader classLoader = Thread.currentThread().getContextClassLoader(');
InputStream isJasper = classLoader.getResourceAsStream(relatorio + ".jasper");
JasperReport relatoriosJasper = (JasperReport) JRLoader.loadObject( isJasper );
[quote=“carlosjrcabelo”]Ola Dennys, veja a configuração dos caminhos do seu projeto, as vezes voce tem que ficar tentando um monte de vezes até descobrir a causa real do seu problema, mas empacotei uma aplicação de teste aqui num arquivo JAR e funcionou corretamente.
[code]
String relatorio = "./src/br/com/santacasa/relatorios/FichaAtendimento.jasper";
// ou FichaAtendimento é um diretorio ou arquivo jasper?
[/code][/quote]
FichaAtendimento.jasper é o nome do arquivo jasper. Já tentei diferentes possibilidades e nada. Qdo o NetBeans gera o jar o existe o diretório \br\com\santacasa\relatorios com o arquivo FichaAtendimento.jasper dentro dele, mas quando eu tento executar dá o erro que eu transcrevi…
O MANIFEST do jar é:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.6.0_03-b05 (Sun Microsystems Inc.)
Main-Class: br.com.santacasa.janelas.AtendimentoPS
Class-Path: lib/substance.jar lib/toplink-essentials.jar lib/toplink-e
ssentials-agent.jar lib/commons-logging-1.1.jar lib/jasperreports-1.3
.4.jar lib/commons-collections-3.2.jar lib/itext-1.3.1.jar lib/postgr
esql-8.1-405.jdbc3.jar
X-COMMENT: Main-Class will be added automatically by build
Alguma idéia?
celso
PS: perdão pelos múltiplos posts semelhantes, mas no meu navegador estava travando e não aparecia que estava enviando, ai cliquei diversas vezes…
Olá Pessoal,
Tentei diversas combinações de diretório e embora algumas funcionem no Netbeans quando eu gero o jar e o executo tenho o erro novamente. Seguindo a sugestão do Dennys, alterei o código para:
String relatorio = "./br/com/santacasa/relatorios/FichaAtendimento.jasper";
//String relatorio = "/relatorios/FichaAtendimento.jasper";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream isJasper = classLoader.getResourceAsStream(relatorio);
JasperReport relatoriosJasper = (JasperReport) JRLoader.loadObject( isJasper );
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Novamente dentro do NetBeans funciona perfeitamente, mas quando eu executo o Jar, quando ele tenta criar o InputStream tenho o erro:
Ljava.lang.StackTraceElement;@13e846f
.
Já postei uma mensagem no Forum do JasperReport mas até agora não recebi nenhuma resposta…
Obrigado pela ajuda,
celso
[quote=“jcfreire”]Olá Pessoal,
Tentei diversas combinações de diretório e embora algumas funcionem no Netbeans quando eu gero o jar e o executo tenho o erro novamente. Seguindo a sugestão do Dennys, alterei o código para:
String relatorio = "./br/com/santacasa/relatorios/FichaAtendimento.jasper";
//String relatorio = "/relatorios/FichaAtendimento.jasper";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream isJasper = classLoader.getResourceAsStream(relatorio);
JasperReport relatoriosJasper = (JasperReport) JRLoader.loadObject( isJasper );
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
jre.printStackTrace();
} catch (Exception ex) {
ex.getMessage();
}
Novamente dentro do NetBeans funciona perfeitamente, mas quando eu executo o Jar, quando ele tenta criar o InputStream tenho o erro:
Ljava.lang.StackTraceElement;@13e846f
.
Já postei uma mensagem no Forum do JasperReport mas até agora não recebi nenhuma resposta…
Obrigado pela ajuda,
celso[/quote]
Olá…
Coloca a exception completa para facilitar a compreensão do erro.
Abraços!
Achei a solução olhando em http://forum.java.sun.com/thread.jspa?threadID=572955&start=0 e tentando um monte de coisa…
Pra funcionar ficou assim:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento.jasper";
try {
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
// AtendimentoPS é o nome da classe.
InputStream isJasper = AtendimentoPS.class.getResourceAsStream(relatorio);
JasperReport relatoriosJasper = (JasperReport) JRLoader.loadObject( isJasper );
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
log.error(jre.getMessage());
} catch (Exception ex) {
log.error(ex.getMessage());
}
Obrigado pela ajuda, mas porque será que com a solução do Dennys não funcionou?
celso
[quote=“jcfreire”]Achei a solução olhando em http://forum.java.sun.com/thread.jspa?threadID=572955&start=0 e tentando um monte de coisa…
Pra funcionar ficou assim:
String relatorio = "/br/com/santacasa/relatorios/FichaAtendimento.jasper";
try {
log.info("Entrou no try");
// Janela pata visualização do PDF
JDialog viewer = new JDialog(new javax.swing.JFrame(),
"Visualização do Relatório", true);
viewer.setSize(800,600);
viewer.setLocationRelativeTo(null);
// AtendimentoPS é o nome da classe.
InputStream isJasper = AtendimentoPS.class.getResourceAsStream(relatorio);
JasperReport relatoriosJasper = (JasperReport) JRLoader.loadObject( isJasper );
JasperPrint jasperPrint = JasperFillManager.
fillReport(relatoriosJasper, parameters, new JREmptyDataSource());
JasperViewer jrViewer = new JasperViewer(jasperPrint, true);
viewer.getContentPane().add(jrViewer.getContentPane());
viewer.setVisible(true);
} catch (JRException jre) {
log.error(jre.getMessage());
} catch (Exception ex) {
log.error(ex.getMessage());
}
Obrigado pela ajuda, mas porque será que com a solução do Dennys não funcionou?
celso[/quote]
Lembrei… tive que pegar o classloader de uma forma diferente pois estavamos utilizando Spring e dava problema ClassLoader… na hierarquia dos ClassLoader’s…
Sem Spring basta acessar o classloader da forma que você usou…
Abraços!