Problema com caminho de diretorio no ireport (jasper)
15 respostas
murillo_smit
[b]Bom, criei um aplicação no netbeans so q na hora que mudei o projeto para outro pc, o relatorio não aparece.
o caminho do diretorio na maquina q criei roda beleza, o caminho eh esse:
ve oq vc axa e min diz ai como fazer esse metado ai?
F
fasts
Cara, é só fazer o que eu escrevi e substituir a string com o caminho do arquivo que tá sendo usado no getResource() e colocar um web.toString() - “web” é o nome que eu dei, no exemplo.
Entendeu?
Evite usar o caminho absoluto, pois ao mudar de máquina o arquivo não será encontrado.
murillo_smit
fasts:
Cara, é só fazer o que eu escrevi e substituir a string com o caminho do arquivo que tá sendo usado no getResource() e colocar um web.toString() - "web" é o nome que eu dei, no exemplo.
Entendeu?
Evite usar o caminho absoluto, pois ao mudar de máquina o arquivo não será encontrado.
Cara ta dando erro! da uma olhada quando eu faço issu que vc mandou comentei onde ta dando erro!
OBS: to usando parametro.
explica melhor pq ainda ñ to entendendo,
desculpas ai o encomodo, mais to precisando apreender issu!
Agradeço
Fexx
mostra qual é o erro.
verifica tbm onde inseriu o relatório.
murillo_smit
Fexx:
mostra qual é o erro.
verifica tbm onde inseriu o relatório.
ERRO ReportUtils.openReport("Clientes", inputStream, parametros, //aki diz assim "Criar campo inputStream em JanelasViews.PesquisaNovo" ou criar variavel local
esse “ReportUtils.openReport” é a parte q trata o relatorio, criei ele em em uma classe.
obg
F
fasts
Cara, se você tentar pegar o exemplo do Fexx e não copiar e colar no seu código talvez funcione…
É lógico que vai dar erro se o caminho do relatório dele não é o mesmo do seu.
Já aprenda a não ficar dando copiar e colar para o seu código, muito menos se o código for um exemplo dos outros.
E esse seu erro é bem simples. Você não tem uma variável declarada com esse nome inputStream, então ele dá esse aviso mesmo.
murillo_smit
fasts:
Cara, se você tentar pegar o exemplo do Fexx e não copiar e colar no seu código talvez funcione…
É lógico que vai dar erro se o caminho do relatório dele não é o mesmo do seu.
Já aprenda a não ficar dando copiar e colar para o seu código, muito menos se o código for um exemplo dos outros.
E esse seu erro é bem simples. Você não tem uma variável declarada com esse nome inputStream, então ele dá esse aviso mesmo.
Cara esse inputStream é o que contem o relatorio! seguir o exemplo dele certin ñ copie e colei não! de cara da pra ve que ñ é apenas copiar e colar… ai ja seria burro demais!
Fexx
Eu criei um assim:
Classe ClienteRelatorio
publicvoidthreadRelatorioProdutosPorClientes(finalJProgressBarprogress,finalJasperReportlocaRelatorio,finalStringparametro1,finalStringparametro2,finalGerarRelatorionomeRelatorioGerarRelatorio,finalClienteidCliente){ThreadtThread=newThread(newRunnable(){@Overridepublicvoidrun(){progress.setIndeterminate(true);try{JasperPrintprint=null;Map<String,Object>map=null;JasperReportlocalRelatorio=locaRelatorio;map=newHashMap<String,Object>();map.put(parametro1,nomeRelatorioGerarRelatorio.getNomeRelatorio());map.put(parametro2,idCliente.getCodigo());print=JasperFillManager.fillReport(localRelatorio,map,Conexao.getConexao());progress.setIndeterminate(false);System.out.println("Concluido");JasperViewer.viewReport(print,false);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Não foi possivel exibir Relatório","Erro ao gerar Relatorio",JOptionPane.DEFAULT_OPTION);}}});tThread.start();}
E na classe que chamo o relatório ficou assim:
Clientep=newPessoaJuridica();GerarRelatoriog=newGerarRelatorio();ClienteRelatoriocr=newClienteRelatorio();StringnomeRelatorio="NomeRelatorio";StringcodigoCliente="CodigoCliente";if(jRBTodosOsClientesPorProduto.isSelected()){try{URLarquivo=getClass().getResource("/relatorios/ClienteProduto.jasper");JasperReportjr;jr=(JasperReport)JRLoader.loadObject(arquivo);g.setNomeRelatorio(jTfNomeRelatorioProdutoClientes.getText());p.setCodigo(0);cr.threadRelatorioProdutosPorClientes(jPGressProdutoPorClientes,jr,nomeRelatorio,"",g,p);}catch(JRExceptione){JOptionPane.showMessageDialog(this,"Não foi possivel Gerar relatorio: "+e.getMessage());}
Tente entender e implementar no seu código, não faz da mesma maneira como fiz se não estiver no seu padrão, pois isso que fiz é para casos específicos.
Abraços.
Fica com DEUS.
murillo_smit
Fexx:
Eu criei um assim:
Classe ClienteRelatorio
publicvoidthreadRelatorioProdutosPorClientes(finalJProgressBarprogress,finalJasperReportlocaRelatorio,finalStringparametro1,finalStringparametro2,finalGerarRelatorionomeRelatorioGerarRelatorio,finalClienteidCliente){ThreadtThread=newThread(newRunnable(){@Overridepublicvoidrun(){progress.setIndeterminate(true);try{JasperPrintprint=null;Map<String,Object>map=null;JasperReportlocalRelatorio=locaRelatorio;map=newHashMap<String,Object>();map.put(parametro1,nomeRelatorioGerarRelatorio.getNomeRelatorio());map.put(parametro2,idCliente.getCodigo());print=JasperFillManager.fillReport(localRelatorio,map,Conexao.getConexao());progress.setIndeterminate(false);System.out.println("Concluido");JasperViewer.viewReport(print,false);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Não foi possivel exibir Relatório","Erro ao gerar Relatorio",JOptionPane.DEFAULT_OPTION);}}});tThread.start();}
E na classe que chamo o relatório ficou assim:
Clientep=newPessoaJuridica();GerarRelatoriog=newGerarRelatorio();ClienteRelatoriocr=newClienteRelatorio();StringnomeRelatorio="NomeRelatorio";StringcodigoCliente="CodigoCliente";if(jRBTodosOsClientesPorProduto.isSelected()){try{URLarquivo=getClass().getResource("/relatorios/ClienteProduto.jasper");JasperReportjr;jr=(JasperReport)JRLoader.loadObject(arquivo);g.setNomeRelatorio(jTfNomeRelatorioProdutoClientes.getText());p.setCodigo(0);cr.threadRelatorioProdutosPorClientes(jPGressProdutoPorClientes,jr,nomeRelatorio,"",g,p);}catch(JRExceptione){JOptionPane.showMessageDialog(this,"Não foi possivel Gerar relatorio: "+e.getMessage());}
Tente entender e implementar no seu código, não faz da mesma maneira como fiz se não estiver no seu padrão, pois isso que fiz é para casos específicos.
Ver se consegue entender agora:
Não implementei com seu codigo, mas assim está muito facil de entender.
Minha classe ClienteRelatorio
tenho um método assim:
publicvoidrelatorio(finalJasperReportlocaRelatorio){try{JasperReportlocalRelatorio=locaRelatorio;Map<String,Object>map=newHashMap<String,Object>();JasperPrintprint=JasperFillManager.fillReport(localRelatorio,map,Conexao.getConexao());JasperViewer.viewReport(print,false);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Não foi possivel exibir Relatório","Erro ao gerar Relatorio",JOptionPane.DEFAULT_OPTION);}}
Pô, cara…
Pra que criar 3 tópicos contendo a mesma dúvida?
murillo_smit
Fexx:
Ver se consegue entender agora:
Não implementei com seu codigo, mas assim está muito facil de entender.
Minha classe ClienteRelatorio
tenho um método assim:
publicvoidrelatorio(finalJasperReportlocaRelatorio){try{JasperReportlocalRelatorio=locaRelatorio;Map<String,Object>map=newHashMap<String,Object>();JasperPrintprint=JasperFillManager.fillReport(localRelatorio,map,Conexao.getConexao());JasperViewer.viewReport(print,false);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Não foi possivel exibir Relatório","Erro ao gerar Relatorio",JOptionPane.DEFAULT_OPTION);}}
Vou seguir esse exemplo, qualquer coisa posto o resultado!
valeu brother!
murillo_smit
Iae brother, eu seguir se exemplo, ele ta chamando o relatorio, mais ta dando um erro, diz q o documento não possui paginas! deve se porquer to usando parametros.
da uma olhada no jeito que eu fiz, como que eu faço para que o parametro funcione?