Relatório com IReport [RESOLVIDO]

Olá galera
Eu pesquisei, pesquisei e não entedi =/
Tipo eu jah fiz o relatório no IReport, jah criei o .jasper dele e o .jrxml, ele funcionou normal

Mas eu não sei como eu chamo esse relatório pela minha aplicação
Tipo colocar um evento em algum botão e aparecer o relatório

Como eu chamo o relatório jasper no Java?

Atenciosamente

[quote=brunorota]Olá galera
Eu pesquisei, pesquisei e não entedi =/
Tipo eu jah fiz o relatório no IReport, jah criei o .jasper dele e o .jrxml, ele funcionou normal

Mas eu não sei como eu chamo esse relatório pela minha aplicação
Tipo colocar um evento em algum botão e aparecer o relatório

Como eu chamo o relatório jasper no Java?

Atenciosamente[/quote]

Tem que importar o .JAR do Jasper para sua aplicação, ele contem os métodos que necessita ser implementado…

Ai você manda o resultset e hashmap por parâmetro para o Jrxml que vai gerar o relatório para você.

Exemplo:

JRResultSetDataSource ds = new JRResultSetDataSource(resultSet); JasperPrint jp = JasperFillManager.fillReport("CAMINHO DO JRXML", hashMap, ds); JasperViewer.viewReport(jp, false);

Eu fiz assim

Deu erro

[code]package Teste;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

import database.classes.ConnectionDB;

public class RelatorioTeste {

public void chamRelatório(){
	
	HashMap hashMap = new HashMap();
	
	String sql = "SELECT nomeEClusa FROM eclusas";
	
	try{
		Connection conn = ConnectionDB.getConnection();
		Statement stm = conn.createStatement();
		ResultSet rset = stm.executeQuery(sql);
	
	JRResultSetDataSource ds = new JRResultSetDataSource(rset);  
    JasperPrint jp = JasperFillManager.fillReport("classic.jrxml", hashMap, ds);  
    JasperViewer.viewReport(jp, false);

	}catch(Exception e){
		e.printStackTrace();
	}
}

public static void main(String args[]){
	
	RelatorioTeste teste = new RelatorioTeste();
	
	teste.chamRelatório();
}

}
[/code]

o erro

[code]

net.sf.jasperreports.engine.JRException: Error loading object from file : classic.jrxml
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:92)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
at Teste.RelatorioTeste.chamRelatório(RelatorioTeste.java:29)
at Teste.RelatorioTeste.main(RelatorioTeste.java:41)
Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream.(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:87)
… 3 more[/code]

O .jrxml e o .jasper estão na pasta do projeto

Verifique seu arquivo jasper, se esta recebendo exatamente os tipos de arquivos que está enviando no java… Esse erro ta estranho, olha a quantidade de campos do relatório e da uma reconferida nessa sintaxe SQL acho que esta errada

Cade o resto??? Só tem 1 campo teu relatório??? Apenas 1 tabela???

Não Teria que importar o pacote abaixo:

import net.sf.jasperreports.engine.util

Cordialmente;

[quote=claupers]Não Teria que importar o pacote abaixo:

import net.sf.jasperreports.engine.util

Cordialmente;

[/quote]

Não necessariamente caro amigo,

Pode se importar os seguintes pacotes:

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

Att. Jonas

Ola pessoal

Eh eu estou fazendo o relatório com apenas um campo mesmo, é mais para testar sabe, só estou listando o nome das eclusas da minha tabela eclusas, primeiro vou fazer o teste assim pra eu ver como funciona depois eu faço o relatório de verdade

A sql está correta, e são os mesmos campos que tem o relatório que eu criei

O que será que está errado?

Tipo o meu relatório tem uma expressão que coloca a data e tals, isso não tem nada a ver com o erro neh?

Mas campos no relatório com dados do banco de dados é soh o nomeEclusa da tabela eclusas mesmo

Amigo, chama-se testes… Tentativa e erro. Tire tudo e deixe apenas 1 campo. apartir daí você vai saber oque pode estar acontecendo

Bom não eh isso, tirei os campos de data e hora e deu o mesmo erro =/

Você não tem algum exemplo de relatório ae que funciona pra eu tenta compilar aqui?

[quote=brunorota]Bom não eh isso, tirei os campos de data e hora e deu o mesmo erro =/

Você não tem algum exemplo de relatório ae que funciona pra eu tenta compilar aqui?

[/quote]

Amigo teste esse código abaixo para o CAMINHO do jasper.

String caminhoRelatorio= "TESTE.jasper"; InputStream Caminho = getClass().getResourceAsStream( "/" + caminhoRelatorio);

Testa esse código ai.

olá

Eu testei e deu esse erro

java.lang.NullPointerException at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266) at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580) at Teste.RelatorioTeste.chamRelatório(RelatorioTeste.java:35) at Teste.RelatorioTeste.main(RelatorioTeste.java:47)

O código ficou assim

[code]public class RelatorioTeste {

public void chamRelatório(){
	
	HashMap hashMap = new HashMap();
	
	String sql = "SELECT nomeEclusa FROM eclusas";
	
	try{
		Connection conn = ConnectionDB.getConnection();
		Statement stm = conn.createStatement();
		ResultSet rset = stm.executeQuery(sql);
	
		
	String caminhoRelatorio= "classic.jasper";      
    InputStream Caminho = getClass().getResourceAsStream(  
                "/" + caminhoRelatorio);  
		
	JRResultSetDataSource ds = new JRResultSetDataSource(rset);  
    JasperPrint jp = JasperFillManager.fillReport(Caminho, hashMap, ds);  
    JasperViewer.viewReport(jp, false);

	}catch(Exception e){
		e.printStackTrace();
	}
}

public static void main(String args[]){
	
	RelatorioTeste teste = new RelatorioTeste();
	
	teste.chamRelatório();
}

}[/code]

e mudando o nome do caminho para TESTE.jasper aconteceu o seguinte erro

java.lang.NullPointerException at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266) at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580) at Teste.RelatorioTeste.chamRelatório(RelatorioTeste.java:35) at Teste.RelatorioTeste.main(RelatorioTeste.java:47)

Não tenho noção doke está acontecendo o0

Obrigado TheKill pela atenção dada ao tópico ^^

[quote=TheKill][quote=brunorota]Bom não eh isso, tirei os campos de data e hora e deu o mesmo erro =/

Você não tem algum exemplo de relatório ae que funciona pra eu tenta compilar aqui?

[/quote]

Amigo teste esse código abaixo para o CAMINHO do jasper.

String caminhoRelatorio= "TESTE.jasper"; InputStream Caminho = getClass().getResourceAsStream( "/" + caminhoRelatorio);

Testa esse código ai.[/quote]

Amigo so uma correção, tente desta forma abaixo:

String caminhoRelatorio= "C:/DIRETORIO/NOME_DO_ARQUIVO.jasper"; InputStream Caminho = getClass().getResourceAsStream( "/" + caminhoRelatorio);

Aguardo seu retorno

soh uma observação

tipo o caminho não deve ser assim?

[code]

String caminhoRelatorio= “C:\DIRETORIO\NOME_DO_ARQUIVO.jasper”;
InputStream Caminho = getClass().getResourceAsStream(
“/” + caminhoRelatorio); [/code]

com as barras invertidas?

[quote=brunorota]soh uma observação

tipo o caminho não deve ser assim?

[code]

String caminhoRelatorio= “C:\DIRETORIO\NOME_DO_ARQUIVO.jasper”;
InputStream Caminho = getClass().getResourceAsStream(
“/” + caminhoRelatorio); [/code]

com as barras invertidas?[/quote]

Não.

Existe duas formas de expecificar o caminho.
String caminho = "C:\\pasta\\arquivo.ext";
String caminho = "C:/pasta/arquivo.ext";

ficou assim, eu copiei o .jasper e o .jrxml pro Desktop e o código ficou assim

String caminhoRelatorio= "C:/Documents and Settings/Administrador/Desktop/classic.jasper"; InputStream Caminho = getClass().getResourceAsStream( "/" + caminhoRelatorio);

e deu o seguinte erro

java.lang.NullPointerException at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266) at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:191) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580) at Teste.RelatorioTeste.chamRelatório(RelatorioTeste.java:35) at Teste.RelatorioTeste.main(RelatorioTeste.java:47)

Amigo o problema esta no seu relatório.

Tem algo errado no seu relatório, NullPointerException

Vixi o0

Eh q eu compilo ele e ele roda normal no IReport

Vc tem o IReport instalado na sua máquina?

Pq ae eu mandava pra ti o .jrxml pra vc, se não for mto trabalho pra ti é claro