O relatório do Jasper não está funcionando depois de fazer o arquivo jar

Eu escrevi o seguinte código para criar o relatório jasper, este código funcionando bem no NetBeans IDE, mas depois de criar o arquivo jar desse projeto, o relatório não está abrindo. Também não está mostrando nenhum erro.

O que pode ser o problema?

Código para criar relatório de jasper

//Path to your .jasper file in your package String reportSource = "src/report/Allvendor_personal_info.jrxml"; try { jasperReport = (JasperReport) JasperCompileManager.compileReport(reportSource); jasperPrint = JasperFillManager.fillReport(jasperReport, null, con); //view report to UI JasperViewer.viewReport(jasperPrint, false); con.close(); } catch(Exception e) { JOptionPane.showMessaxgeDialog(null, "Error in genrating report"); } 

O caminho src não existirá em tempo de execução e você nunca deve referenciá-lo.

Com base nisso, o Allvendor_personal_info.jrxml será um recurso incorporado, armazenado no arquivo Jar, você não poderá acessá-lo como em arquivos normais, em vez disso, será necessário usar o Class#getResource ou o Class#getResourceAsStream

 String reportSource = "/report/Allvendor_personal_info.jrxml"; InputStream is = null; try { is = getClass().getResourceAsStream(reportSource); jasperReport = (JasperReport)JasperCompileManager.compileReport(is); jasperPrint = JasperFillManager.fillReport(jasperReport, null, con); //... } finally { try { is.close(); } catch (Exception exp) { } } 

Agora, tendo dito isso, deve haver muito poucas razões para compilar um arquivo .jrxml em tempo de execução, em vez disso, você deve compilar esses arquivos no momento da compilation e implantar os arquivos .jasper . Isto irá melhorar o desempenho da sua aplicação, pois o processo de complicação não é curto, mesmo para um relatório básico.

Isso significaria que você usaria …

 jasperReport = (JasperReport) JRLoader.loadObjectFromFile(is); 

Em vez de JasperCompileManager.compileReport

Definir variables ​​de ambiente para a pasta lib de arquivos jar

Bom pessoal, não sei se é tarde demais, mas perdi 1 dia pesquisando as soluções para esse problema, sobre o JasperReport depois de construir um executável do Jar. Para fazer seus relatórios funcionarem após a criação de um jar, você só precisa escrever as seguintes linhas

 String reportUrl = "/reports/billCopyReport.jasper"; //path of your report source. InputStream reportFile = null; reportFile = getClass().getResourceAsStream(reportUrl); Map data = new HashMap(); //In case your report need predefined parameters you'll need to fill this Map JasperPrint print = JasperFillManager.fillReport(reportFile, data, conection); JasperViewer Jviewer = new JasperViewer(print, false); Jviewer.setVisible(true); /* var conection is a Connection type to let JasperReport connecto to Database, in case you won't use DataBase as DataSource, you should create a EmptyDataSource var*/ 

você precisa copiar a pasta que tem arquivos jasper / Jrxml e colocá-la no mesmo diretório do seu arquivo jar. sempre que você escreve um código como este

  String reportSource = "/report/Allvendor_personal_info.jrxml"; //It will look for this file on your location so you need to copy your file on /report/ this location InputStream is = null; try { is = getClass().getResourceAsStream(reportSource); jasperReport = (JasperReport)JasperCompileManager.compileReport(is); jasperPrint = JasperFillManager.fillReport(jasperReport, null, con); //... } catch(Exception e){ }