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:

InputStream inputStream = getClass().getResourceAsStream("/RelatoriosViews/BuscaCliente.jasper");

Alguem tem ideia de como resolver issu?[/b]

15 Respostas

F

Isso é chatíssimo! Eu penei pra ajeitar isso em um sub-relatório. Cacei milhares de resoluções e nenhuma funcionava…
Eu consegui assim:

URL web = getClass().getResource("/RelatoriosViews/BuscaCliente.jasper");

Aí tu passa um web.toString() pra esse método.

PS: Ponha o nome de pacote em minúsculo.

Fexx

Eu utilizo assim.

URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");  
			JasperReport jr;
					jr = (JasperReport) JRLoader.loadObject( arquivo );

Abraços.

Fica com DEUS.

murillo_smit
fasts:
Isso é chatíssimo! Eu penei pra ajeitar isso em um sub-relatório. Cacei milhares de resoluções e nenhuma funcionava... Eu consegui assim:
URL web = getClass().getResource("/RelatoriosViews/BuscaCliente.jasper");
Aí tu passa um web.toString() pra esse método.

PS: Ponha o nome de pacote em minúsculo.

Não deu pra entender bem da uma olhada no meu codigo completo:

InputStream inputStream = getClass().getResourceAsStream("C:/Sistema Ivel v1.1/src/RelatoriosViews/BuscaCliente.jasper");

        // mapa de parâmetros do relatório 
        Map parametros = new HashMap();

        parametros.put("cliente", id);

        try {

            // abre o relatório
            ReportUtils.openReport("Clientes", inputStream, parametros,
                    ConnectionFactory.getSakilaConnection());


            // Visualiza o relatório em formato PDF */
            // JasperViewer.viewReport("idCliente.pdf", false);

        } catch (SQLException exc) {
            exc.printStackTrace();
        } catch (JRException exc) {
            exc.printStackTrace();
        }

    }

ve oq vc axa e min diz ai como fazer esse metado ai?

F

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.
URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");
        JasperReport jr;
        jr = (JasperReport) JRLoader.loadObject(arquivo);
        // mapa de parâmetros do relatório 
        Map parametros = new HashMap();

        parametros.put("cliente", id);

        try {

            // abre o relatório
            ReportUtils.openReport("Clientes", inputStream, parametros,  // aki da erro no inputStream
                    ConnectionFactory.getSakilaConnection());


            // Visualiza o relatório em formato PDF */
            // JasperViewer.viewReport("idCliente.pdf", false);

        } catch (SQLException exc) {
            exc.printStackTrace();
        } catch (JRException exc) { // aki da outro erro
            exc.printStackTrace();
        }

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

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

public void threadRelatorioProdutosPorClientes(final JProgressBar progress, final JasperReport locaRelatorio, final String parametro1, final String parametro2, final GerarRelatorio nomeRelatorioGerarRelatorio, final Cliente idCliente){
		Thread tThread = new Thread(new Runnable() {
			
			@Override
			public void run() {
				progress.setIndeterminate(true);
				try {

					JasperPrint print = null;
					Map<String , Object> map = null;
					JasperReport localRelatorio = locaRelatorio;

						map = new HashMap<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 (Exception e) {
					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:

Cliente p = new PessoaJuridica();
		GerarRelatorio g = new GerarRelatorio();
		ClienteRelatorio cr = new ClienteRelatorio();
		
		String nomeRelatorio = "NomeRelatorio";
		String codigoCliente = "CodigoCliente";

		if (jRBTodosOsClientesPorProduto.isSelected()) {
			
			try {
			
			URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");  
			JasperReport jr;
					jr = (JasperReport) JRLoader.loadObject( arquivo );
					g.setNomeRelatorio(jTfNomeRelatorioProdutoClientes.getText());
					p.setCodigo(0);
					
					cr.threadRelatorioProdutosPorClientes(jPGressProdutoPorClientes, jr, nomeRelatorio, "", g, p);
				} catch (JRException e) {
					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

public void threadRelatorioProdutosPorClientes(final JProgressBar progress, final JasperReport locaRelatorio, final String parametro1, final String parametro2, final GerarRelatorio nomeRelatorioGerarRelatorio, final Cliente idCliente){
		Thread tThread = new Thread(new Runnable() {
			
			@Override
			public void run() {
				progress.setIndeterminate(true);
				try {

					JasperPrint print = null;
					Map<String , Object> map = null;
					JasperReport localRelatorio = locaRelatorio;

						map = new HashMap<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 (Exception e) {
					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:

Cliente p = new PessoaJuridica();
		GerarRelatorio g = new GerarRelatorio();
		ClienteRelatorio cr = new ClienteRelatorio();
		
		String nomeRelatorio = "NomeRelatorio";
		String codigoCliente = "CodigoCliente";

		if (jRBTodosOsClientesPorProduto.isSelected()) {
			
			try {
			
			URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");  
			JasperReport jr;
					jr = (JasperReport) JRLoader.loadObject( arquivo );
					g.setNomeRelatorio(jTfNomeRelatorioProdutoClientes.getText());
					p.setCodigo(0);
					
					cr.threadRelatorioProdutosPorClientes(jPGressProdutoPorClientes, jr, nomeRelatorio, "", g, p);
				} catch (JRException e) {
					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.

Ei blz? cara da uma olhada no meu, eu postei ele todo, da uma analizada e me diz oq pode ser feito, pode ser?
segue o link:
http://www.guj.com.br/java/268180-problema-ao-abrir-relatorio-ireport-na-aplicacao-java-jar

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:

public void relatorio(final JasperReport locaRelatorio){

				try {

					JasperReport localRelatorio = locaRelatorio;

						Map<String , Object> map = new HashMap<String, Object>();
						
						JasperPrint print = JasperFillManager.fillReport(localRelatorio, map, Conexao.getConexao());
					
					JasperViewer.viewReport(print, false);
					
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Não foi possivel exibir Relatório", "Erro ao gerar Relatorio", JOptionPane.DEFAULT_OPTION);
				}
			}

E na classe onde chamo o relatório está assim:

public void chamarRelatorio(){
		ClienteRelatorio cr = new ClienteRelatorio();

			try {
			
			URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");  
			JasperReport jr;
					jr = (JasperReport) JRLoader.loadObject( arquivo );

					
					cr.relatorio(jr);
				} catch (JRException e) {
					System.out.println("Erro"+e.getMessage());
				}

	}

tenta ai e qualquer coisa me fala.

F

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:

public void relatorio(final JasperReport locaRelatorio){

				try {

					JasperReport localRelatorio = locaRelatorio;

						Map<String , Object> map = new HashMap<String, Object>();
						
						JasperPrint print = JasperFillManager.fillReport(localRelatorio, map, Conexao.getConexao());
					
					JasperViewer.viewReport(print, false);
					
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Não foi possivel exibir Relatório", "Erro ao gerar Relatorio", JOptionPane.DEFAULT_OPTION);
				}
			}

E na classe onde chamo o relatório está assim:

public void chamarRelatorio(){
		ClienteRelatorio cr = new ClienteRelatorio();

			try {
			
			URL arquivo = getClass().getResource("/relatorios/ClienteProduto.jasper");  
			JasperReport jr;
					jr = (JasperReport) JRLoader.loadObject( arquivo );

					
					cr.relatorio(jr);
				} catch (JRException e) {
					System.out.println("Erro"+e.getMessage());
				}

	}

tenta ai e qualquer coisa me fala.

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?

int id = Integer.parseInt(jTextField2.getText());
        
        Map parametros = new HashMap();
        parametros.put("cliente", id);
        
        ClienteRelatorio cr = new ClienteRelatorio();        
        
        try {            
            
            URL arquivo = getClass().getResource("/RelatoriosViews/BuscaCliente.jasper");            
            JasperReport jr;            
            jr = (JasperReport) JRLoader.loadObject(arquivo);            
            
            
            cr.relatorio(jr);            
        } catch (JRException e) {            
            System.out.println("Erro" + e.getMessage());            
        }
Criado 19 de março de 2012
Ultima resposta 20 de mar. de 2012
Respostas 15
Participantes 3