Erro ao chamar relatorio

29 respostas
darkroger

bom dia, tenho um relatorio no meu projeto, no eclipse ele funciona normalmente, mas quando executo o .jar e clico no botao que “chama” o relatorio da este erro aqui…

Exception in thread AWT-EventQueue-0 java.lang.NoClassDefFoundError: net/sf/ja

sperreports/engine/JRException

at relVendaNow.(relVendaNow.java:14)

at Principal.actionPerformed(Principal.java:231)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.AbstractButton.doClick(AbstractButton.java:302)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1041)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

alguem sabe o pode ser que esta causando isso? valew

29 Respostas

furutani

Olá

Coloque os jar’s do jasper reports no classpath da aplicação.
São os mesmos jars que você no classpath do eclipse.

wilcorrea

Olá darkroger,

Então seu problema pode estar em duas situações eu acho.
1° - não estão sendo criados os vinculos necessários entre os seus jars que devem estar dentro do jar da aplicação
solução - um plugin chamado fatJar - http://fjep.sourceforge.net/ …ele engorda o seu jar de classpaths

2° - caso vc já tenha usado este plugin e o erro permanece assegure-se que o seu arquivo jasper(aquele que formata o relatório está bem visivel do lado de fora do jar da aplicação.
solução - deixe algo como:

String jasperFile = "Relatorio.jasper";  
relatorio = JasperFillManager.fillReport(jasperFile, parametros, obj);

E o arquivo deverá estar neste caso no mesmo diretório que o jar.

Espero ter ajudado
[],

darkroger

os jars necessarios para que o relatorio funcione ja estao no classpath, mas mesmo assim da esse erro…

meu classpath:
.;%JAVA_HOME%;C:\Arquivos de programas\iReport-2.0.0\lib\commons-collections-2.1.jar;C:\Arquivos de programas\iReport-2.0.0\lib\commons-javaflow-20060411.jar;C:\Arquivos de programas\iReport-2.0.0\lib\commons-logging-api-1.0.2.jar;C:\Arquivos de programas\iReport-2.0.0\lib\iReport.jar;C:\Arquivos de programas\iReport-2.0.0\lib\jasperreports-1.3.4.jar;C:\Arquivos de programas\iReport-2.0.0\lib\mysql-connector-java-3.1.11-bin.jar

wilcorrea

darkroger:
os jars necessarios para que o relatorio funcione ja estao no classpath, mas mesmo assim da esse erro…

meu classpath:
.;%JAVA_HOME%;C:\Arquivos de programas\iReport-2.0.0\lib\commons-collections-2.1.jar;C:\Arquivos de programas\iReport-2.0.0\lib\commons-javaflow-20060411.jar;C:\Arquivos de programas\iReport-2.0.0\lib\commons-logging-api-1.0.2.jar;C:\Arquivos de programas\iReport-2.0.0\lib\iReport.jar;C:\Arquivos de programas\iReport-2.0.0\lib\jasperreports-1.3.4.jar;C:\Arquivos de programas\iReport-2.0.0\lib\mysql-connector-java-3.1.11-bin.jar

Vc criou uma biblioteca com eles na sua aplicação???
Se vc criou não precisa por assim no classpath pq senão vc impede que seu jar seja usado em qualquer lugar…
Vc adiciona no classpath a biblioteca…

meu classpath

[]s

darkroger

criei sim, biblioteca lib, dentro dela estao os jars, ai vai meu classpath da aplicaçao:

<?xml version="1.0" encoding="UTF-8"?>
moacirjava

Me desculpem se a mensagem está no lugar errado, mas como é que se põe esse arquivo para download no fórum?

wilcorrea

Então moacirjava na hora que a gente ta aqui nessa area de edição para responder ou criar tópicos tem um botão azul attachments (anexos) abaixo da area de edição… é só clicar nele e segui suas orientações…

Ow darkroger e o fatJar vc testou?? Seu classpath ta mais que bom…o problema com certeza não é nele…

[]s

darkroger

wilcorrea, testei sim, mas preciso resolver isso sem o fat jar, sera qual o problema? ta muito estranho, pois no eclipse funciona normal, fora da esse erro ai…ja tentei muita coisa e nada, tem mais alguma dica??

valew

wilcorrea

Cara então ..to abraçando sua causa tentando entender o que está acontecendo...

Vc disse que criou o jar, ele roda... e que dispara a exception java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JRException. Ou seja, até o momento do clique do botão tudo corre bem...quando vc clica ele informa que foi tentado instanciar uma classe do Jar do jasperReport (vc pode abrir seu jasperreports-*.*.*.jar com o winrar que verá o caminho: net/sf/jasperreports/engine/JRException) e não a encontrou em lugar nenhum(java.lang.NoClassDefFoundError). Acredito que tenha sido numa sequencia parecida com essa que foi lançada a exception
ResultSet resultSet = s.executeQuery(query);	
		//implementação da interface JRDataSource para DataSource ResultSet
		JRResultSetDataSource obj = new JRResultSetDataSource(resultSet);
		Map parametros = new HashMap();
		
		String jasperFile = &quot;Relatorio.jasper&quot;;  
		  
		
		JasperPrint relatorio = JasperFillManager.fillReport(jasperFile, parametros, obj);  
		
		JasperViewer viewer = new JasperViewer(relatorio,false);   
		viewer.setVisible(true);   
		viewer.setTitle(&quot;Relatório de alunos&quot;);
		}catch (JRException e){	
			throw new Exception(&quot;Erro  &quot; + e.getMessage());
				
		}

A pricipio me pareceu que seu classpath estava ok...mas dpois reparei que vc apenas endereçou os jars dentro dele e não criou uma bibiloteca tipo: "org.eclipse.jdt.USER_LIBRARY/reportJasper"... pra cada jar

Então o que quero dizer é que é possivel que vc precise fazer o seguinte:
No projeto acesse: properties -> Java build path -> Libraries -> Add library... -> User Library -> Next -> User libraries... -> New... -> (indique um nome)

Selecione a biblioteca criada e clique em: Add JARS... -> (indique a localização da pasta onde se encontram os jars da nova biblioteca....no caso sua pasta lib)
(http://www.keelframework.org/release/2.1-dev/docbook/keel-doc/html_chunk/quickstart/eclipse.html)
Me parece que isso deve resolver...

Senão retorna meu velho que continuamos nossa pesquisa....

[],s

darkroger

o trecho que uso é :

public JasperPrint gerar() throws relExcRepositorio{

JasperPrint rel = null;

try {

Connection con = relConexao.getConexao();

Conexao Conex = new Conexao();

HashMap map = new HashMap();

String arquivoJasper = RelatorioMaoRR1.jasper;

rel = JasperFillManager.fillReport(arquivoJasper, map, con);

} catch (JRException e) {

JOptionPane.showMessageDialog(null,e.getMessage());

}

return rel;

}

vou testar o que vc disse e falo se deu certo…valew

darkroger

é…ja esta começando a ficar dificil…

nao deu certo wilcorrea, tentei d varios geitos e nao deu, cheguei a pensar que fosse minha maquina, mas testei em outra maquina e deu o mesmo erro, sera que é minha jre?

ai vai como ficou meu classpath:

<?xml version="1.0" encoding="UTF-8"?>
wilcorrea

Tah…vou pedir um help a um colega meu que está sempre trabalhando com isso…

Valeu

wilcorrea

Grande dark

Conversei com o cara e ele disse que com certeza o erro é no load de uma dessas classes.
Detalhe é que os fontes que ele me passou de exemplo foram feitos no Europa e tiveram que ser adaptados para o meu 3.2

Pega ai esse… http://www.mediafire.com/?jymxtzzjj01 é o jar…rodando (tem que fazer um backupzin no mysql)
E esse é o zipado da pasta do projeto que estava no meu wokspace (nem exportei :slight_smile: dei um ctrl c ctrl v msm…)
http://www.mediafire.com/?j5zowzyzjkz

Os dois são a mesma coisa né…Só que um é o jar pronto o outro o projeto…
Perdi certo tempo pra colocar esse projeto pra rodar no 3.2…talvez seja esse seu problema…não sei qual IDE vc usa. Só sei que as dicas que te dei só resolvem no Europa. Ou num pc com alguma caracteristica especifica,pq no meu…(eu usava o Europa quando fiz aquele exemplo que te passei!!!)

Bom acho que não posso fazer mais muito por vc não cara…

Se isso ai não funfar, ai pode sim realmente ser algum problema de configuração da sua máquina ou eu teria que analisar seu código com calma…

Valeu

darkroger

blz, vou ver aqui, esse servidor mediafire ta fora, ve se tem geito d postar novamente,

valeu

wilcorrea

Que urucubaca,sempre uso ele…

Vou upar noutro lugar…

segura ai…

wilcorrea

Então desmembrei tudo, o projeto upei aqui no forum msm e a pasta lib ta em duas partes nos links ai…
ai depois vc recoloca lah dentro da pasta…
Acho interessante que vc observe os detalhes desse projeto…tipo classpath e qualquer outro arquivo de configuração.

Aqui rodou como esta ai…service pack 2, java 6, iReport 2.0.4…
http://wilcorrea.googlepages.com/libParte1.zip
http://wilcorrea.googlepages.com/libParte2.zip
http://wilcorrea.googlepages.com/Report_fat.jar
(não sei se isso vai funcionar…srsrsrs)

Enquanto eu upava ai testei por aqui remover o jar iReport e um dos dois do jasperreports-2.0.*.jar que estão ai e funfou…hehe…Ontem não tinha funfado…hhahahaah…Mas tudo bem

V ai e qualquer coisa da um toque

[]'s

darkroger

opa, voltei…sobre o erro, continua a mesma coisa, so que agora qndo pede algum classe do ireport, eu jogo ela dentro do jar, mas no final da esse erro aqui:

Exception in thread main net.sf.jasperreports.engine.JRException: Class not fo

und when loading object from file : relat.jasper

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:96

)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(Jasper

FillManager.java:443)

at RelatorioBibliotecaPessoal.geraRelatorio(RelatorioBibliotecaPessoal.j

ava:42)

at RelatorioBibliotecaPessoal.main(RelatorioBibliotecaPessoal.java:66)

Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JasperR

eport

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:153

8)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1

693)

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
wilcorrea

HHUUUmmm…
Eu já vi esse erro cara…
Se vc tiver criado aquelas bibliotecas vc esqce um pouco delas…
http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.jdt.doc.user/tasks/tasks-113.htm
Nesse link tem a descrição em ingles de como adicionar jars direto no classpath (é o problema que tinha te falado dos eclipses, no europa só a biblioteca funciona no 3.2 tem que ffazer assim…)

´Transcrevendo

  1. Select the project, and from its pop-up menu, select Build Path > Add external archives.
  2. In the dialog that appears, select the JAR file that you want to add. Note that you can add multiple JARs at once.

V ai …
Valeu

darkroger

entao… mas estou usando o eclipse 3.3 (europa), sera que no 3.2 da certo isso???

valew

wilcorrea

Faz ai tbm…eu uso o 3.2 e funcionou…

Aquele exemplo que postei tava feito assim…
Pode ser tbm que a configuração da máquina na qual eu usei o europa fosse diferente …não sei…Ainda não tinha pensado nisso…

Bom, se quiser upar seu código em algum lugar de repnte a gente pode ajudar melhor…
(Embora eu ache que seja apenas falta de alguns detalhes que estão passando batidos)

Valeu

darkroger

blz, vou ver essa parada das versoes do eclipse, o meu codigo das classes do relatorio nao esta aqui comigo, vou dar um geito de posta-los logo…

valew

darkroger

opa…to baixando o eclipse 3.2, peguei a classe principal e as classes do relatorio e coloquei aqui…é o botao relatorio que chama o relaltorio… estou enviando a pasta lib vazia para que o arquivo ficasse menor, se tiver geito me passa seu email que envio os .jars do ireport que uso no projeto.

valew

darkroger

tava pensando aqui, sobre o manifest, tenho q colocar o classpath la? se tiver sabe como ficaria?

valw

wilcorrea

Então eu tenho um aqui assim…

Manifest-Version: 1.0
Main-Class: principal.Inicial
Class-Path: lib/mysql-connector-java-5.0.6-bin.jar

Eu to dando uma olhada no seu código e tem uma pá de coisa comentada
Deu aqui pra abrir um relatório meu…
Me passa um backup do seu banco que adapto pro seu…

Valeu

darkroger

entao, tem um bocado comentado pq nao enviei pra vc as outras classes…tava pensando, se dentro do eclipse funiona normal, entao nao deve ser o codigo fonte nao…de qualquer forma ai vai o banco, ele foi feito no sql server 2000.

valeu

wilcorrea

Ai c me apertou…rsrsrsrs…eu não tenho mais o sqlServer instalado…
huhauhauhaua…e se depender de mim não volto a ter…hehehe

Então seu código ta bom sim, fiz um jar com o fat acessando meu mysql e abrindo um relatorio meu e deu certo…
Seu problema deve estar na conexão com o sgbd…

E agora!!! como resolver o impasse dos sgbd’s?? hehe…

Valeu

darkroger

opa, so uma coisa, ja tentou gerar o jar sem o fatjar, com ele sei que funciona, mas sem ele??

valew

wilcorrea

Não funcionou… Vou ver qual a diferença entre um e outro e depois te falo…
Valeu

wilcorrea

Opa…Não sei se vc já resolveu o problama ai…
De qualquer forma segue uma imagem.
Aparentemente o fat apenas abre o jar dentro da aplicação…não vi nada além disso…

Valeu


Criado 8 de março de 2008
Ultima resposta 19 de mar. de 2008
Respostas 29
Participantes 4