Problema c/ Jasper Report

Fiz 1 relatorio no IReport, pegou blz, consigo conexao c banco e visualizo os dados. Dai qnd vo migrar p/ visualizar os dados atraves duma classe Java, n consigo, dar um erro q me deixou perdido, pois o codigo (creio eu) q esteja correto (peguei do tutorial do Guj). O codigo eh este:

[code]package catalogo_ireport;

/* pacotes necessários /
import net.sf.jasperreports.engine.
;
import net.sf.jasperreports.view.JasperViewer;
import java.sql.;
import java.util.
;

public class RelatorioBibliotecaPessoal {
/* Realza contornaniexão com o banco de dados, redo o objeto Connection /
private static Connection getConnection( ) throws ClassNotFoundException, SQLException {
String driver = “org.gjt.mm.mysql.Driver”;
String url = “jdbc:mysql://localhost/codata_catalogo”;
String user = “root”;
String password = “sa”;
Class.forName(driver);
Connection con = DriverManager.getConnection( url, user, password );
return con;
}
/
Gera Relatorio e visualiza-o /
public void geraRelatorio( ) throws JRException, Exception {
Connection con = getConnection( );
Statement stm = con.createStatement( );
String query = "SELECT s.id, c.nome ‘cliente’, l.nome ‘linguagem’, s.nome ‘sistema’, s.estado, " +
"s.descricao FROM sistema s, cliente c, linguagem l " +
“where s.fk_cliente=c.id and s.fk_linguagem=l.id;”;
ResultSet rs = stm.executeQuery( query );
/
implementação da interface JRDataSource para DataSource ResultSet /
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
/
HashMap de parametros utilizados no relatório. Sempre instanciados /
Map parameters = new HashMap();
// parameters.put(“COLUNA”, valor);
/
Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint /
JasperFillManager.fillReportToFile( “CodataCatalogo.jasper”, parameters, jrRS );
/
Exporta para o formato PDF /
JasperExportManager.exportReportToPdfFile( “CodataCatalogo.jrprint” );
/
Preenche o relatorio e o salva diretamente em arquivo PDF. Sem
a necessidade do .jrprint /
// JasperRunManager.runReportToPdfFile(“BibliotecaPessoal.jasper”, parameters, jrRS);
/
Visualiza o relatório em formato PDF */
JasperViewer.viewReport( “CodataCatalogo.pdf”, false );
}
public static void main(String[] args) throws JRException, Exception {
new RelatorioBibliotecaPessoal().geraRelatorio();
}
}[/code]

O erro eh este:

[code]Exception in thread “main” java.io.FileNotFoundException: CodataCatalogo.jasper
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:75)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:443)
at catalogo_ireport.RelatorioBibliotecaPessoal.geraRelatorio(RelatorioBibliotecaPessoal.java:34)
at catalogo_ireport.RelatorioBibliotecaPessoal.main(RelatorioBibliotecaPessoal.java:44)

NESTED BY :
net.sf.jasperreports.engine.JRException: CodataCatalogo.jasper
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:75)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:443)
at catalogo_ireport.RelatorioBibliotecaPessoal.geraRelatorio(RelatorioBibliotecaPessoal.java:34)
at catalogo_ireport.RelatorioBibliotecaPessoal.main(RelatorioBibliotecaPessoal.java:44)
Caused by: java.io.FileNotFoundException: CodataCatalogo.jasper
… 4 more
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)[/code]

Eu to colocando o .jasper (CodataCatalogo.jasper) na pasta dos .class, eh isto msm? Vlw…

A JVM nao encontrou seu arquivo .jasper
Tente colocar o Path completo para ele (c:/seuProjeto/relatorio/CodataCatalogo.jasper)

Espero ter ajudado!
Falow!

Ok, se n me engane ja fiz isto e n pegou, mas eu testoi de novo. Mas o correto eh n ter q setar o caminho completo, pq a minha aplicacao irá rodar em vários clientes c/ caminhos diferentes em cada maquina, dai a importancia do caminho relativo (q abstrai estes diferntes caminhos).

chrstianovale, vc ja fez algum relatorio em Jasper?? Qnd vc fez, vc definiu so o caminho relativo ou o completo?

Olá, sempre que faço relatorios eu coloco como caminho o diretorio corrente da minha aplicaçao.

Como eu trabalho com aplicaçoes Web eu faço da seguinte maneira:

String path = getServletContext().getRealPath("/relatorio/grafico") + "/";

ou seja, o diretorio atual onde meu Servlet roda. Daí dependendo do tipo de relatorio que o cliente desejar eu apenas completo a string:

path = path + "Relatorio.jasper";

Se sua aplicacao for Web vc pode fazer dessa forma.

Não sei qual o comando para pegar o direntorio corrente em aplicaçoes desktop, mas, dê uma olhada na API que com certeza vc vai encontrar algum método que faça algo parecido com isso.

Falow!

ok, vo testar, vlw

tipo, esta pasta /relatorio eh uma subpasta da pasta raiz da tua app? ou seja, ta assim?

…/
…/relatorio
…/pasta2
…/pasta4
…/pasta3

trokei as seguintes linhas do codigo, colocando o caminho completo (o resto eh igual):

JasperFillManager.fillReportToFile(“F:\NetBeans workspace\Catalogo_ireport\build\classes\catalogo_ireport\CodataCatalogo.jasper”, parameters, jrRS );

JasperExportManager.exportReportToPdfFile( “F:\NetBeans workspace\Catalogo_ireport\build\classes\catalogo_ireport\CodataCatalogo.jrprint” );

JasperViewer.viewReport( “F:\NetBeans workspace\Catalogo_ireport\build\classes\catalogo_ireport\CodataCatalogo.pdf”, false );

Deu o seguinte erro:

[code]Exception in thread “main” java.lang.ClassNotFoundException: org.apache.commons.collections.SequencedHashMap
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:574)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:443)
at catalogo_ireport.Relatorio.geraRelatorio(Relatorio.java:35)
at catalogo_ireport.Relatorio.main(Relatorio.java:45)

NESTED BY :
net.sf.jasperreports.engine.JRException: Class not found when loading object from file : F:\NetBeans workspace\Catalogo_ireport\build\classes\catalogo_ireport\CodataCatalogo.jasper
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:96)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:443)
at catalogo_ireport.Relatorio.geraRelatorio(Relatorio.java:35)
at catalogo_ireport.Relatorio.main(Relatorio.java:45)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.SequencedHashMap
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:574)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)
… 3 more
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
[/code]

E ai?

Ta faltando o commons-collections-2.0.jar no seu classpath
adiciona esse que esta anexado.

pensei q este pacote fosse nativo do JDK

colokei este .jar no cp da app, mas olha o q deu:

init: deps-jar: compile-single: run-single: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.<clinit>(JRAbstractJavaCompiler.java:58) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:494) at java.lang.Class.newInstance0(Class.java:350) at java.lang.Class.newInstance(Class.java:303) at net.sf.jasperreports.engine.design.JRDefaultCompiler.getCompiler(JRDefaultCompiler.java:201) at net.sf.jasperreports.engine.design.JRDefaultCompiler.loadEvaluator(JRDefaultCompiler.java:216) at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:402) at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:350) at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:92) at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:74) at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:147) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:83) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:492) at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:448) at catalogo_ireport.Relatorio.geraRelatorio(Relatorio.java:35) at catalogo_ireport.Relatorio.main(Relatorio.java:45) Java Result: 1 BUILD SUCCESSFUL (total time: 1 second)

nd?

n use o arquivo .pdf no JasperViewer:
tente executar o método JasperViewer.viewReport() da seguinte forma:

JasperViewer.viewReport( "F:\\NetBeans workspace\\Catalogo_ireport\\build\\classes\\catalogo_ireport\\CodataCatalogo.jrprint", false );

Já tive esse problema uma vez, tenta isso pra ver.
flw

vo testar, mas e se eu quiser direto em pdf? deveria ter pego.

testei aki e deu msm erro.

q engocio chato viu, to fazendo conforme o tutorial e ta dando pau. sera q o tutorial ta desatualizado?

eu to achando q ta faltando alguma biblioteca aqui, pois testei outro exemplo simples e deu um erro semelhante:

public static void main(String[] args) { JasperReport jasperReport; JasperPrint jasperPrint; try { jasperReport = JasperCompileManager.compileReport( "F:\\NetBeans workspace\\Catalogo_ireport\\jasperreports_demo.jrxml"); jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), new JREmptyDataSource()); JasperExportManager.exportReportToPdfFile( jasperPrint, "F:\\NetBeans workspace\\Catalogo_ireport\\jasperreports_demo.pdf"); } catch (JRException e) { e.printStackTrace(); } }

erro:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:142) at catalogo_ireport.JasperReportsIntro.main(JasperReportsIntro.java:20) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)

Você pode gerar o pdf diretamente sem precisar passar pelo JasperViewer, mas dai você não pode abrir o pdf com o JasperViewer.

É bem provável que esteja faltando mesmo, eu to usando o commons-digester-1.7.jar, axu que resolve esse seu problema ai. Além desse, adicionei outros também para poder gerar esses relatórios.

Todos os .jar necessários, vc encontra dentro do diretório …\iReport\lib\

Para lhe adiantar, na minha aplicação estou usando todos os commons-*.jar, mais o jcommon-1.0.0.jar, jasperreports-1.2.5.jar e o poi-2.0-final-20040126.jar, este último é para poder salvar arquivos .xls, caso o relatório seja visualizado no JasperViewer.

Qualquer coisa, escreve aee.

Espero ter ajudado.
Flw

Mas eu pensei q tds bibliotecas necessarias vinhessem no IReport (tanto q no tutorial eu li isto), mas pelo visto n. Eu adicionei tds os .jar do /Ireport/lib pra fazer 1 teste se pegava, msm assim deu pau. Deve ta faltando algum .jar msm. Poe esse digest p eu pegar ai e outros q vc acha necessarios. Agora era p vir esses jar´s necessarios no IReport p a pessoa n ter este trabalho q to tendo. Vlws…

como eu disse, adicionei tds as bibliotecas do /Ireport/lib p fazer 1 teste se pegava, mas ainda deu pau.

dps eu tentei adicionar as bibliotecas q vc usou no teu projeto, porem ta dando este erro:

Exception in thread "main" java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
        at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:121)
        at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:82)
        at catalogo_ireport.Relatorio.geraRelatorio(Relatorio.java:35)
        at catalogo_ireport.Relatorio.main(Relatorio.java:45)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

Aqui eu instalei apenas o IReport, pq li q ja vinha c a biblioteca JasperReport. Ai vc so tem o IReport instalado tb?

hlds…cara me explica como se faz para gera um relatorio…tipo qundo vc faz um relatorio no IReport ele jah não tem query…como se faz um relatorio q aceita as querys de uma classe valeu…

Bom dia, Pessoal

Sou novo por aqui e em Java também, estou desenvolvendo em desktop, até ai sem problema. Meu problema esta na geração do relatório, pois apresenta a seguinte mensagem: “Class not found when loading object from file”, mas no ireports funcionou corretamente.
Já inclui todos os jar do ireport na path da minha aplicação.
Meu código é o seguinte:

		try{
		Map parametros = new HashMap();
		parametros.put("ds_Bairro","Bairro Teste");
		JasperPrint impressao = JasperFillManager.fillReport("jasper/classic.jasper" , parametros );
   
                // JasperRunManager.runReportToPdfFile("BibliotecaPessoal.jasper", parameters, jrRS);
                /* Visualiza o relatório em formato PDF */
                JasperViewer.viewReport( "BibliotecaPessoal.pdf", false );
		}catch(JRException e){
			JOptionPane.showInternalMessageDialog(pai.getContentPane(), 
					"Erro: " + e.getMessage(),
					"ERRO", JOptionPane.ERROR_MESSAGE);
		}

Obs: o Ireport gera arquivos java na pasta.

Atenciosamente

Valdecir Neumann
Prefeitura do Municipio de Toledo - Paraná

Passei por este tipo de problema ainda ontem.
Era pura e simplesmente falta de 2 jar.
Um deles já foi citado aqui antes que é o commons-collections-2.1.jar
jar necessário na aplicação é o iReport.jar
Todos os 2 estão presentes no diretório lib do IReport.
Na pior das hipóteses, copie todos os jar´s deste diretório.