Pessoal, no netbeans ele encontra o relatório normal, mas quando vou pelo jar, ele não está encontrando. Já vi alguns tópicos por aqui sobre esse problema, mas mesmo assim não consegui resolver, pois eles falam que é apenas tirar o “src” do caminho da pasta onde está alocado o relatório. segue meu código!
Connection conn = new SQLConnection().java_db();
if(!jComboBox1.getSelectedItem().equals("Selecione...")&&procurar1.getDate()!= null && procurar2.getDate()!=null){
Map p = new HashMap();
p.put("tipoteste", jComboBox1.getSelectedItem());
p.put("dataini", procurar1.getDate());
p.put("datafim", procurar2.getDate());
JasperReport relatorio;
JasperPrint impressao;
try {
relatorio = JasperCompileManager.compileReport(new File("").getAbsolutePath()
+ "/Relatorios/reprovadosgeral.jrxml");
impressao = JasperFillManager.fillReport(relatorio, p, conn);
JasperViewer view = new JasperViewer(impressao, false);
view.setTitle("Relatório Reprovados");
view.setVisible(true);
} catch (Exception e) {
}
}else
{
JOptionPane.showMessageDialog(null, "Preencha todos os campos");
}
}
Olá, e seu relatório está em que pasta em relação a seu projeto?
pela IDE eu consigo encontrar ele aqui Rodrigo /src/Relatorios/reprovadosgeral.jrxml
, mas ao extrair o .jar, não tem a pasta src
De fato não tem, o conteúdo de src vai pro jar.
Em uma breve pesquisada encontrei isso:
JasperPrint jp = JasperFillManager.fillReport(
ClassLoader.getSystemResourceAsStream(“com/foo/blah/reports/myreport.jasper”)
Dica: se vc precisa fazer modificações no fonte do seu relatório antes de gerar ele, ai blz, do contrário, use o compilado (.jasper) sempre, evita retrabalho desnecessário.
que tipo de modificações Rodrigo? poderia ser mais especifico por favor?
QUALQUER. se vc só pega o jrxml, compila e gera o relatório, está sendo ineficiente.
não conseguiu e por que? oq vc fez? poste o código atualizado, como q eu vou saber oq vc tentou fazer
Não estou sabendo montar com o código q vc me mandou… está ficando em vermelho
Connection conn = new SQLConnection().java_db();
if (!jComboBox1.getSelectedItem().equals("Selecione...") && procurar1.getDate() != null && procurar2.getDate() != null) {
Map p = new HashMap();
p.put("tipoteste", jComboBox1.getSelectedItem());
p.put("dataini", procurar1.getDate());
p.put("datafim", procurar2.getDate());
JasperReport relatorio;
JasperPrint impressao;
try {
JasperPrint jp = JasperFillManager.fillReport(
ClassLoader.getSystemResourceAsStream("com/foo/blah/Relatorios/reprovadosgeral.jasper"));
// relatorio = JasperCompileManager.compileReport(new File("").getAbsolutePath()
// + "Relatorios/reprovadosgeral.jrxml");
impressao = JasperFillManager.fillReport(relatorio, p, conn);
JasperViewer view = new JasperViewer(impressao, false);
view.setTitle("Relatório Reprovados");
view.setVisible(true);
} catch (Exception e) {
}
} else {
JOptionPane.showMessageDialog(null, "Preencha todos os campos");
}
pô véi, vc nem alterou o nome dos pacotes, vc tem este pacote ‘com/foo/blah’ ?
Se ajuda!
pô véi, to falando q o erro ta na hora de montar q não to sabendo? me ajuda!
Tentei fazer assim
if(!jComboBox1.getSelectedItem().equals("Selecione...")&&procurar1.getDate()!= null && procurar2.getDate()!=null){
Map p = new HashMap();
p.put("tipoteste", jComboBox1.getSelectedItem());
p.put("dataini", procurar1.getDate());
p.put("datafim", procurar2.getDate());
try {
InputStream caminho = getClass().getResourceAsStream("/Relatorios/reprovadosgeral.jasper");
JasperPrint print = JasperFillManager.fillReport(caminho, p, conn);
JasperViewer view = new JasperViewer(print, false);
view.setTitle("Relatório Reprovados");
view.setVisible(true);
} catch (Exception e) {
}
}else
{
JOptionPane.showMessageDialog(null, "Preencha todos os campos");
}
mas da o seguinte erro
abr 18, 2018 9:22:16 AM net.sf.jasperreports.engine.query.JRJdbcQueryExecuter <init>
ADVERTÊNCIA: The supplied java.sql.Connection object is null.
Estou ajudando, mas que fique claro que não estou aqui pra fazer pra vc.
seu erro inicial era q n conseguia carregar seu relatório. Agora seu problema é outro:
Neste caso, novamente, ao invés de ajudar a resolver, vou sugerir que mude sua lógica.
Como seu relatório pega os dados? ele mesmo faz uma consulta no banco? se sim, errado!
Por boas práticas o relatório não deve se conectar ao banco e fazer consultas, ele deve receber os dados da sua aplicação.
Exemplo passando uma coleção de dados:
https://www.tutorialspoint.com/jasper_reports/jasper_filling_reports.htm
então um exemplo seria assim:
public boolean gerarRelatorioFornecedores() {
try {
this.conectar();
this.executarSQL("SELECT * FROM fornecedores;");
JRResultSetDataSource jrRS = new JRResultSetDataSource(getResultSet());
// caminho do arquivo dentro dos pacotes
InputStream caminhoRelatorio = this.getClass().getClassLoader().getResourceAsStream("ArquivosJasper/relatorioFornecedores.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(caminhoRelatorio, new HashMap(), jrRS);
String nomeArquivo = "C:/rel.pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint, nomeArquivo);
File file = new File(nomeArquivo);
try {
Desktop.getDesktop().open(file);
} catch (Exception e) {
JOptionPane.showConfirmDialog(null, e);
}
file.deleteOnExit();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getMessage(), "Erro:", JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
}