Problema com caminho de diretorio no ireport (jasper)

[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]

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.

Eu utilizo assim.

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

Abraços.

Fica com DEUS.

[quote=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.[/quote]

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

[code] 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();
    }

}[/code]

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

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.

[quote=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.[/quote]

Cara ta dando erro! da uma olhada quando eu faço issu que vc mandou comentei onde ta dando erro!
OBS: to usando parametro.

[code] 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();
    }

[/code]

explica melhor pq ainda ñ to entendendo,
desculpas ai o encomodo, mais to precisando apreender issu!

Agradeço

mostra qual é o erro.
verifica tbm onde inseriu o relatório.

[quote=Fexx]mostra qual é o erro.
verifica tbm onde inseriu o relatório.
[/quote]

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

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.

[quote=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.[/quote]

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!

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.

[quote=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.

[/quote]

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

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.

Pô, cara…
Pra que criar 3 tópicos contendo a mesma dúvida?

[quote=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.
[/quote]

Vou seguir esse exemplo, qualquer coisa posto o resultado!
valeu brother!

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?

[code] 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());            
    } [/code]