Erro com Relatorio Ireport

14 respostas
J

Bom dia, estou com uma duvida quanto a classe para chamar o relatorio, criei os relatorios no plugin do Ireport no NetBeans, criou beleza, criei a classe para chamar o relatorio e ela não apresenta nenhum erro, só que quando chamo no botão ela apresenta um erro, vou postar aki minha classe e logo após o erro que ela apresenta.

package com.br.relatorios;

import com.br.acessobd.AcessoBD;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author Douglas
 */
public class Rela {

    private Connection con;
    private AcessoBD acessoBD = new AcessoBD();
    PreparedStatement ps;
    ResultSet rs;
    private static final String url = "jdbc:mysql://localhost/banco_ac";
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String login = "root";
    private static final String pwd = "123";
    private String sql = "select * from clientes";

    public Rela() {
    try{
        con = acessoBD.conectar();
        ps = con.prepareStatement(sql);
        rs = ps.executeQuery();

        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
        JasperPrint jasperPrint = JasperFillManager.fillReport(
                "com.br.relatorios\rel_cli.jasper", new HashMap(), jrRS);
        JasperViewer.viewReport(jasperPrint);
    }
    catch(Exception erro){
             JOptionPane.showMessageDialog(null, "deu erro =" + erro);
    }
}
}

Vou e chamo essa classe por um Botão na Aplicação, na hora que ele chama apresenta esse erro na tela:

deu erro =net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: com.br.relariosel_cli.jasper

Alguem pode me ajudar disendo o que aconteceu e como se resolve ou se tem algum outro erro na classe ?
Desde ja obrigado.

14 Respostas

D

Camarada, o arquivo com.br.relariosel_cli.jasper não está no local que deveria (ou o nome dele está diferente na chamada). Como o nome está aqui

JasperPrint jasperPrint = JasperFillManager.fillReport(  
                "com.br.relatorios\rel_cli.jasper", new HashMap(), jrRS);

acredito que não esteja na pasta raiz do projeto

O

drsmachado:
Camarada, o arquivo com.br.relariosel_cli.jasper não está no local que deveria (ou o nome dele está diferente na chamada). Como o nome está aqui

JasperPrint jasperPrint = JasperFillManager.fillReport(  
                "com.br.relatorios\rel_cli.jasper", new HashMap(), jrRS);

acredito que não esteja na pasta raiz do projeto


De feto o erro está dando porque ele não está achando o arquivo

J

O arquivo ta dentro do projeto/src/relatorios/arquivo.jasper

Eu tenho que colocar de que maneira pra ele achar ?

L

cara , quando vc copila seu relátorio ,veja no Cosole de Sáida, o caminhu que ele esta gerando.

J

Ele diz que está nesse diretorio:
C:\Users\Douglas\Documents\Projetos Net\Estoque_t2ti\src\com\br\relatorios\relatorio.jasper

Só que na hora que eu coloco

String arquivoJasper = "C:\Users\Douglas\Documents\Projetos Net\Estoque_t2ti\src\com\br\relatorios\relatorio.jasper"; // ele diz que é ilegal escape character JasperPrint jasperPrint = JasperFillManager.fillReport(arquivoJasper,parametros, jrRS); JasperViewer.viewReport(jasperPrint);

Fica com erro na linhas String arquivoJasper.

D

Não tenho como testar, mas terá de passar

...
"/relatorios/nome_do_arquivo.jasper"
D
JavaPB:
Ele diz que está nesse diretorio: C:\Users\Douglas\Documents\Projetos Net\Estoque_t2ti\src\com\br\relatorios\relatorio.jasper Só que na hora que eu coloco
String arquivoJasper = "C:\Users\Douglas\Documents\Projetos Net\Estoque_t2ti\src\com\br\relatorios\relatorio.jasper"; // ele diz que é ilegal escape character
        JasperPrint jasperPrint = JasperFillManager.fillReport(arquivoJasper,parametros, jrRS);
        JasperViewer.viewReport(jasperPrint);

Fica com erro na linhas String arquivoJasper.

Então, um pouco de básico de Strings:

Quando você coloca uma "\" o java entende que o próximo caractere será um caractere de escape. #Maqueporraehessa? Um caractere de escape, dentro de uma String, diz que ali haverá algo específico, como pular uma linha, tabular, etc.
String a = "A\nB";
System.out.print(a);
//note que não é println
A saída será
A
B
Como a estrutura de diretórios, invariavelmente, é lida assim
"C:\Users\Douglas\Documents\Projetos Net\Estoque_t2ti\src\com\br\relatorios\relatorio.jasper"
e \U, \P não são caracteres de escape, ele lança a exception. Solução?
"C:\\Users\\Douglas\\Documents\\Projetos Net\\Estoque_t2ti\\src\\com\\br\\relatorios\\relatorio.jasper"
\\ escapa a barra e, o caminho é lido normalmente...
J

Cara continua dando o mesmo erro, da uma olhada ai no meu código possa ser que algo errado, é a primeira vez que faço essa classe.

eu to chaamando a classe pelo botão dessa maneira:

new relatorios.Rela();

ta certo a forma de chamar ?

D

Ah, por favor, evite passar o caminho absoluto do arquivo, isso te limita muito. Faça o seguinte, leia sobre a classe File, há algumas propriedades de localização de arquivos e diretórios bem funcionais.
Será mais fácil, caso precise colocar o projeto ou mesmo fazê-lo rodar em outro computador (com outro SO, por exemplo)

J

vou tentar aki

J

continua dando o mesmo erro do começo =/
MEsmo assim muito obrigado pessoal ;D

D

Só uma pergunta, qual o nome do arquivo?
Tenta o seguinte, com a classe File, localizar o mesmo, se achar (e não lançar exception), pega o AbsolutePath e passa ele como parâmetro para o relatório.

J

O nome do arquivo que o Ireport cria é relatorio.jasper

L

Cara, na minha aplicação eu faço dessa forma vê se vc entende!

public class RelatorioCliente {   

	static Connection connection;
	ResultSet rs = null;   


	public RelatorioCliente(String codigoImprCliente) {    
		/* Efetua a conexao a base de dados e coleta os valores da base de dados armazenando-os  
       em um array para ser futuramente utilizado */  

		RelatorioClienteTO relatorioClienteTO = new RelatorioClienteTO();

		try {   
			  Class.forName("org.apache.derby.jdbc.ClientDriver"); // O sun.jdbc.odbc.JdbcOdbcDriver significa que seria usado um banco access
		      String url = "jdbc:derby://localhost:1527/BancoBar;create=false";// esta string carrega o nome da fonte de dados
		      connection = DriverManager.getConnection(url,"vitor"," ");// aqui  efetuada conex�o passando -se a fonte de dados e o login e senha do banco, que neste caso n�sso existem.
		      System.out.println("Conexão estabelecida"); // exibida uma mensagem informando que a conex�o foi efetuada

			PreparedStatement pstm = connection.prepareStatement( "select * from tb_Clientes where CodigoImprCliente = ?");

			pstm.setString(1,codigoImprCliente);

			rs = pstm.executeQuery();

			if(rs.next()) {   
				
				relatorioClienteTO.setCodigoImprCliente(rs.getString("codigoImprCliente"));
				relatorioClienteTO.setNomeCLi(rs.getString("nomeCLi"));
				relatorioClienteTO.setTelefoneCli(rs.getString("telefoneCli"));
				relatorioClienteTO.setEnderecoCli(rs.getString("enderecoCli"));
			}   
		}   
		catch (Exception e) {   
			System.err.println("Problemas apresentados na operacao de conexao");   
			e.printStackTrace();   
		}   

		/* Inicio do bloco que ira gerar nossos relatorios e 3ª parte */  
		try {

			JRBeanCollectionDataSource ds = null;
			JasperPrint print = null;

			//Verifica se existe no minimo uma proposta a ser impressar 
			List<RelatorioClienteTO > listaRelatorio = new ArrayList<RelatorioClienteTO>();

			listaRelatorio.add(relatorioClienteTO);

			ds = new JRBeanCollectionDataSource(listaRelatorio);

			URL  url = getClass().getResource("/relatorios/cliente_BarBalada.jasper");

			JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(url);

			print = JasperFillManager.fillReport(relatorioJasper, null , ds);

			JasperViewer.viewReport(print,null,"Bar Balada", null);
			
		} catch (JRException e) {
			e.printStackTrace();
		}        

	}
}

em seguida na outra tela com o Botão Imprimir eu chamo ela

private void btnCodigoImpressaoActionPerformed(java.awt.event.ActionEvent evt) {

    	RelatorioCliente  relatorio = new  RelatorioCliente (txtCodigoImprCliente.getText());
    	
    }

Criado 26 de maio de 2011
Ultima resposta 26 de mai. de 2011
Respostas 14
Participantes 4