Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

14
respostas

Falha na geração do PDF

Exception in thread "main" net.sf.jasperreports.engine.JRException: Error compiling report java source files : C:\Users\Guilherme\Documents\Desenvolvimento\workNeon\Jasper\financas_1498487074130_538312.java 
    at net.sf.jasperreports.engine.design.JRJavacCompiler.compileClasses(JRJavacCompiler.java:106)
    at net.sf.jasperreports.engine.design.JRAbstractClassCompiler.compileUnits(JRAbstractClassCompiler.java:77)
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:201)
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:240)
    at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:156)
    at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:115)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:415)
    at Principal.main(Principal.java:19)
Caused by: java.io.IOException: Cannot run program "javac": CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at net.sf.jasperreports.engine.design.JRJavacCompiler.compileClasses(JRJavacCompiler.java:75)
    ... 7 more
Caused by: java.io.IOException: CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 11 more
14 respostas

Até o System.out funciona, mas o erro aparece dali para frente.

public static void main(String[] args) throws Exception {
        System.out.println("Começando o teste!!!");

        JasperCompileManager.compileReportToFile("financas.jrxml"); 

        Connection conexao = new ConnectionFactory().getConnection();
        Map<String, Object> params = new HashMap<String, Object>();

        JasperPrint jasperPrint = JasperFillManager.fillReport("C:\\Users\\Guilherme\\Documents\\Desenvolvimento\\workNeon\\Jasper\\financas.jasper", params, conexao);
        OutputStream stream = new FileOutputStream("C:\\Users\\Guilherme\\Documents\\Desenvolvimento\\workNeon\\Jasper\\financas.pdf");

        JRExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, stream);
        exporter.exportReport();

        stream.close();

        conexao.close();
    }

Pelos meus testes o erro é gerado na linha:

JasperCompileManager.compileReportToFile("C:\Users\Guilherme\Documents\Desenvolvimento\workNeon\Jasper\financas.jrxml");

Oi,

Pelo que entendi, o arquivo jrxml não está sendo encontrado.

Caused by: java.io.IOException: Cannot run program "javac": CreateProcess error=2, O sistema não pode encontrar o arquivo especificado
    at java.lang.ProcessBuilder.start(Unknown Source)

Té mais,

Fagner, boa tarde,

O problema é que deveria ser encontrado já que o path está correto!!

Oi,

Tente executar com breakpoint e a cada linha tente inspecionar onde ocorre ocorre o erro. Além disso perceba que para compilar o jrxml você não coloca o path inteiro, e já para buscar o compilado(jasper) você informa o path completo.

Espero ter ajudado,

FAgner, toda ajuda é bem vinda, mas já tinha tentado o path absoluto, e não mudou nada.

Se olhares, ele está procurando o arquivo .java e com o que parece ser um time stamp no final:

Exception in thread "main" net.sf.jasperreports.engine.JRException: Error compiling report java source files : C:\Users\Guilherme\Documents\Desenvolvimento\workNeon\Jasper\financas_1498498381844_42687.java

Olá,

Tente algo diferente:

http://community.jaspersoft.com/questions/518509/compiling-error-java-ireport-jrxml

Neste link, ele mudou a forma de compilar o arquivo.

Té mais,

Fagner, novamente obrigado pelo retorno.

Esse código usa métodos deprecated, e demanda novas libs. Testei e mesmo assim recebi outros erros.

Gostaria de saber o que falta para que eu consiga usar conforme o curso.

Eu joguei o relatório dentro e um sistema com struts que uso, e consegui fazer funcionar com o Struts2, mas queria fazer ele rodar conforme o curso. É minha primeira incursão no universo jasper e preciso conhecer os passos.

Olá,

Entendi. O seu jrxml está na raiz do projeto? Seu projeto é um maven project, java project normal?

Té mais,

Sim meu jrxml está na raiz do projeto. O projeto é o do curso, baixado o zip como instruído pelo exercício. Sem maven e com todas as libs adicionadas.

Fiz um teste aqui e tirando a seguinte linha:

JasperCompileManager.compileReportToFile("financas.jrxml");

a classe compila. Para que exatamente serve essa linha?

Olá,

Dá uma olhada:

http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperCompileManager.html

Espero ter ajudado,

O método compileReportToFile() da classe JasperCompileManager serve para compilar o arquivo .jrxml criado pelo Report Designer que voce utilizou, no caso o IReport (eu estou utilizando o JasperSoft Studio) no arquivo .jasper que vai ser utilizado pela aplicação java para gerar o relatório. Isso só deve ser feito uma vez, ou antão depois de ter sido feita alguma modificação no design do relatório. No meu caso eu nem utilizei mais esse método, o que eu passei a fazer foi abrir o arquivo jrxml no Report Designer (IReport ou JasperSoft Studio) e utilizar a função build dele, que compila o report em arquivo .jasper, exatamente o mesmo que o método em questão faz.

Estou com o mesmo problema alguém conseguiu resolver?