.jar não abre relatório IReport

12 respostas
W

Já fuçei bastante atras disso, mas não consigo executar o relatório no arquivo .jar ,mas no netbeans ele funciona alguem pode me dar uma ajuda

12 Respostas

H

Você poderia mostrar como está fazendo para abrir o relatorio do IReport no seu codigo, ou seja, o codigo que funciona no netbeans mas não no jar ?

W

public void gerarRelatorio() throws Exception { String arquivo = "src/relatorio/report1.jasper"; Connection con = Conexao.obterCon(); PreparedStatement pstm = con.prepareStatement("SELECT * FROM cliente ORDER BY nome"); ResultSet rs = pstm.executeQuery(); JRDataSource jrds = new JRResultSetDataSource(rs); Map parameters = new HashMap(); parameters.put("REPORT_CONNECTION",con); JasperPrint print = JasperFillManager.fillReport(arquivo, parameters, jrds); JasperExportManager.exportReportToPdfFile(print,"src/relatorio/report1.pdf"); Desktop.getDesktop().open(new File("src/relatorio/report1.pdf")); }

H

Eu creio que o problema esta no seu mapeando do caminho de relatorio, aonde você faz

String arquivo = "src/relatorio/report1.jasper"; 
//E depois em
JasperExportManager.exportReportToPdfFile(print,"src/relatorio/report1.pdf");                              
Desktop.getDesktop().open(new File("src/relatorio/report1.pdf"));

Quando você compila o jar esse relatorio vai para aonde ?
Compile o seu jar com o netbeans e depois extrai ele com o winrar e procura em que local o seu relatorio estara.
Eu imagino que ele estara em uma pasta chamada relatorio com o nome report1.

Tente isso e me diga onde foi para o seu relatorio.

W

Sim, extrai o arquivo jar e dentro tem uma pasta chamada relatorio

H

Sim e dentro dessa pasta relatorio tem o seu relatorio correto ?

Mas a pasta SRC existe dentro do JAR ?
O caminho “src/relatorio/report1.jasper” é valido ?

W

sim tem o relatorio mas essa pasta src não existe dentro do jar

H

Então esse é o seu problema você esta informando um caminho invalido e provavelmente esta recebendo um NullPointerException.

Vamos arrumar o seu problema, esse relatorio ficará dentro do jar correto ?
Logo, é possivel ter acesso ao relatorio com o metodo getResourceAsStream(), que receberá o nome do recurso e ira procura-lo dentro do seu jar.

entao você pode fazer:

InputStream stream = getClass().getResourceAsStream("/relatorio/report1.jasper");
//E no JasperFillManager ao inves de fazer
//JasperFillManager.fillReport(arquivo, parameters, jrds);  
//faça
JasperFillManager.fillReport(stream , parameters, jrds);

Agora você deve ser capez de prencher o relatorio, eu nunca usei o JasperExportManager.exportReportToPdfFile();
Então, por favor, me responda onde o metodo grava o pdf, em uma pasta fora do jar com o nome src ?

W

grava dentro da pasta src. não testei a mudança que vc passou pois estou no trabalho agora

W

Funcionou, mas nessa parte não como posso fazer JasperExportManager.exportReportToPdfFile(print,"/relatorio/report1.pdf"); Desktop.getDesktop().open(new File("/relatorio/report1.pdf"));

H

Tudo bem, quando testar me diga se funcionou.
Seria útil, por enquanto, se fosse mostrasse o erro, ao invés de repassar a exceção faça:

public void gerarRelatorio() {
		try {
			InputStream stream = getClass().getResourceAsStream("/relatorio/report1.jasper"); 
			Connection con = Conexao.obterCon();
			PreparedStatement pstm = con.prepareStatement("SELECT * FROM cliente ORDER BY nome");
			ResultSet rs = pstm.executeQuery();
			JRDataSource jrds = new JRResultSetDataSource(rs);
			Map parameters = new HashMap();
			parameters.put("REPORT_CONNECTION", con);
			JasperPrint print = JasperFillManager.fillReport(stream, parameters, jrds);
			JasperExportManager.exportReportToPdfFile(print, "src/relatorio/report1.pdf");
			Desktop.getDesktop().open(new File("src/relatorio/report1.pdf"));
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage());
		}
	}

Desse modo você vai poder ver o erro mesmo abrindo o jar, mas não se esqueça de depois voltar para o outro modo que você escreveu onde você repassa a exceção.

Mais uma coisa, caso o código funcione o relatório em pdf será salvo em uma pasta no mesmo local do jar?
Faça o teste e diga se funciona.

W

Não conseguir passar para pdf, estou visualizando em .jasper. Valeu

H

Então ele abre em jasper, mas não em pdf, direto do jar ?

Então o export para pdf esta com erro ?
Por favor, coloque o erro que aparece na hora de passar para pdf.

Criado 6 de dezembro de 2012
Ultima resposta 6 de dez. de 2012
Respostas 12
Participantes 2