Oi amigos, estou com um problema com meu relatorio iReport.
Estou desenvolvendo uma aplicação no NetBenas 6.9.1, e fiz um relatoriono IReport 4.0.
Quando estou dentro do NetBeans, o meu relatorio é exibido normalmente, porem quando mando limpar e construir e rodo a aplicação no windows, quando mando chamar o relatorio ele não é exibido, não da erro nem nada, só não mostra nada, como se o botão estivesse sem função nenhuma.
Por favor me ajudem a resolver este problema, ja procurei aqui varios post mas não consegui resolver.
Um abraço
Está um bocado vago esse seu problema, mas cheira a caminho do relatório sendo informado errado dentro da sua aplicação.
sammarino,
Trabalhamos com código…
Então posta código da classe que faz a chamada e onde está o relatório.
uma pergunta vc esta montando sua aplicação no netbeans?
abrx
…
Two - Vou postar o codigo sim, obrigado.
lokit´s - Sim, estou desenvolvendo no NetBeans 6.9.1, dentro dele funciona perfeitamente, mas quando construo o projeto e executo pelo arquivo jar da pasta dist, só´o relatório é que não aparece quando clico no botão que corresponde a ele, o resto funciona normalmente. Obrigado.
A chamada do seu relatório bem provavelmente está cercada por um try-catch. Na captura da exceção coloque um ex.printStackTrace(); e então chame sua aplicação já compilada pela linha de comando usando java -jar suaAplicacao.jar Clique no botão para chamar seu relatório e veja o que foi mostrado no console. Serão essas mensagens que darão pistas concretas do problema.
Boa noite a todos, este é o codigo fonte da classe que chama o relatorio:
package Utilitarios;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class AutCaixa{
Conexao con = new Conexao();
public AutCaixa(){
try
{
con.conecta();
con.executeSQL("select * from pagamentos");
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperPrint jasperPrint = JasperFillManager.fillReport
("C:/Users/sammarino1975/Documents/NetBeansProjects/Pagamentos/relatorios/autcaixa.jasper", new HashMap(), jrRS);
JasperViewer .viewReport(jasperPrint);
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, " erro " + erro);
}
}
public static void main (String args[])
{
AutCaixa app = new AutCaixa();
}
}
Chama perfeitamente o relatorio dentro do Netbeans, mas fora não.
O meu relatorio está salvo neste local: C:/Users/sammarino1975/Documents/NetBeansProjects/Pagamentos/relatorios/autcaixa.jasper
Ah, uso o windows 7, e esse endereço ai eu consegui pelas propriedades do relatorio.
Caros amigos, tenho outra duvida, quando clico no botão de fechar o relatorio, ele está fechando a aplicação toda, nao estou conseguindo colocar o codigo DISPOSE_ON_CLOSE nesta classe, onde exatamente ele deveria ficar no meu codigo e qual a sintaxe correta dele? Obrigado.
Sobre sua última pergunta… nessa linha:
JasperViewer .viewReport(jasperPrint);
coloque assim:
JasperViewer .viewReport(jasperPrint, false);
E sobre a chamada do relatório, aqui eu faço assim:
JasperReport report = (JasperReport) JRLoader.loadObject("meuRelatorio.jasper");
relatorio = JasperFillManager.fillReport(report, parametros, conexao); // parametros é o HashMap e conexao é o Connection
Dessa forma, só preciso deixar o meuRelatorio.jasper na mesma pasta em que está o jar da minha aplicação e funciona. Inclusive essa aplicação fica numa pasta compartilhada, e o pessoal acessa pela rede e já era.
ENTÃO MEU CODIGO FICARIA ASSIM?
package Utilitarios;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class AutCaixa{
Conexao con = new Conexao();
public AutCaixa(){
try
{
con.conecta();
con.executeSQL(“select * from pagamentos”);
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperReport report = (JasperReport) JRLoader.loadObject(“autcaixa.jasper”);
relatorio = JasperFillManager.fillReport (report, new HashMap(), jrRS);
JasperViewer .viewReport(relatorio, false);
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, " erro " + erro);
}
}
public static void main (String args[])
{
AutCaixa app = new AutCaixa();
}
}
É ISSO? SE ESTIVER ERRADO, VC ME FARIA O FAVOR DE COLOCAR CORRETAMENTE PARA MIM?
A PALAVRA RELATORIO EM NEGRITO DEVE SER SUBSTITUIDA POR ALGUMA COISA OU FICA RELATORIO MESMO?
OBRIGADO PELA AJUDA.
Ola, mudei o codigo e ele ficou assim:
package Utilitarios;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
public class TedCaixa{
Conexao con = new Conexao();
public TedCaixa(){
try
{
con.conecta();
con.executeSQL("select * from pagamentos");
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperReport report = (JasperReport) JRLoader.loadObject
("C:/Users/sammarino1975/Documents/NetBeansProjects/Pagamentos/relatorios/tedcaixa.jasper");
JasperPrint relatorio = JasperFillManager.fillReport(report, new HashMap(), jrRS);
JasperViewer .viewReport(relatorio, false);
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, " erro " + erro);
}
}
public static void main (String args[])
{
TedCaixa app = new TedCaixa();
}
}
O problema de fechar toda a aplicação foi resolvido, mas continua só aparecendo o relatorio dentro do netBeans.
Fiz tambem com JasperReport report = (JasperReport) JRLoader.loadObject(“tedcaixa.jasper”);
mas não deu certo. Copiei o relatorio para a pasta dist do meu projeto, pois é lá que fica o jar da aplicação, ele simplesmente sumiu de la, e tambem nao deu certo.
Quando mando executar dentor do netbeans aparece o seguinte no console, mas executa normalmente:
run:
log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
CONSTRUÍDO COM SUCESSO (tempo total: 26 segundos)
Tem outra coisa, a bliblioteca ant, que veio no iReport dá o maior pau se estiver copiada dentro da pasta java\jdk1.6_22\jre\lib\ext, só funciona se eu deletar esta biblioteca de lá.
.
O teu último código tá mais perto de dar certo. Nesta linha
JasperReport report = (JasperReport) JRLoader.loadObject("C:/Users/sammarino1975/Documents/NetBeansProjects/Pagamentos/relatorios/tedcaixa.jasper");
Eu tiraria o caminho completo do relatório e deixaria apenas
JasperReport report = (JasperReport) JRLoader.loadObject("tedcaixa.jasper");
Enquanto estiver desenvolvendo, salve o seuRelatorio.jasper na pasta acima da pasta dist. Essa pasta dist é recriada pelo NetBeans quando compila a aplicação, então é por isso que o relatório some de lá. É só na hora de distribuir a aplicação que você deve adicionar os seus .jasper na pasta dist (ou em outra que vc desejar, o lance é estar tudo dentro do mesmo lugar - o jar da aplicação e os .jasper).
Nunca copiei a pasta ant pra lugar nenhum…
Oi Ademilston, fiz como vc disse, salvei o jasper na pasta pagamentos e mudei o codigo conforme vc havia me instruido, so mostrou o relatorio dentro do netbeans. Fiz o teste de, depois de compilar, como se tivesse terminado a aplicação, copiar o tedcaixa.jasper na pasta dist e mandei executar, mas ainda não mostrou o tal do relatorio. Eu tenho que instalar algo no PC alem do iReport? Mudar alguma coisa nas variaveis de ambiente?
Nada a instalar… teria que ser simples assim… De tudo o que te falei antes, faltou só mencionar isto:
JasperViewer viewer = new JasperViewer(relatorio, false); // nessa linha você diz que ao fechar a janela do visualizador o restante da aplicação ficará aberta
viewer.setVisible(true); //será esta a cerejinha do bolo que te falta aí??
Oi Ademilton, ainda não deu certo, quando clico no botão que imprime o relatorio, ele fica parecendo que esta chamando mas nada aparece na tela, so dentro do NetBeans. Será que é algo no meu PC? Nas variaveis de ambiente? Mas volto a agradecer pela atenção.
Oi, veja se está correto o que estou fazendo, fiz uma classe em branco pra fazer a conexao com o banco de dados e com o formulario do ireport,
package Relatorios;
import Utilitarios.Conexao;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
public class TedCaixa{
Conexao con = new Conexao();
public TedCaixa(){
try
{
con.conecta();
con.executeSQL("select * from pagamentos");
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperReport report = (JasperReport) JRLoader.loadObject("tedcaixa.jasper");
JasperPrint relatorio = JasperFillManager.fillReport(report, new HashMap(), jrRS);
JasperViewer viewer = new JasperViewer(relatorio,false);
viewer.setTitle("Relatório de Pagamentos");
viewer.setVisible(true);
viewer.show();
//viewer.setBounds(0,0,800,600); Determina o tamanho da janela
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, " erro " + erro);
}
}
public static void main (String args[])
{
TedCaixa app = new TedCaixa();
}
}
e no botao que chama esta classe para mostrar o relatorio pra que ele seja impresso, fiz assim, events, action, actionperformed:
new Relatorios.TedCaixa();
Ola amigos, consegui resolver o problema.
Tem que adicionar as bibliotecas instaladas no iReport ao projeto pelo netbeans para poder funcionar.
No meu caso, estou usando o iReport 4.0, as blibliotecas dele ficam na pasta C:\Program Files\JasperSoft\iReport-4.0.0\ireport\modules\ext, adicione todas, (no meu caso a ant-1.7.1, eu nao instalei porque dava erro), e adicionei tambem a biblioteca ireport.jar, do iReport 3.1. Para adicionar as bibliotecas ao projeto, clique com o botão direito sobre o projeto, dentro do netbeans, propriedades, Bibliotecas, aba Compilar, Adicionar JAR/Pasta, selecione todas e de um ok. Depois de tudo pronto, mande limpar e construir. Feito isso, vá a pasta do seu projeto e na pasta dist, onde fica o jar que vai executar a aplicação, e copie os relatorios .jasper para esta pasta dist que da certinho. Mas lembre-se, se for limpar e construir outra vez, copie novamente, pois esta pasta dist e substituida toda vez que mandamos limpar e construir o projeto. Obrigado a todos pela ajuda. Não teria conseguido sem vcs, um grande abraço. Segue o codigo fonte da classe que chama o relatorio:
package Relatorios;
import Utilitarios.Conexao;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
public class TedCaixa{
Conexao con = new Conexao();
public TedCaixa(){
try
{
con.conecta();
con.executeSQL("select * from pagamentos");
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
JasperReport report = (JasperReport) JRLoader.loadObject("tedcaixa.jasper");
JasperPrint relatorio = JasperFillManager.fillReport(report, new HashMap(), jrRS);
JasperViewer viewer = new JasperViewer(relatorio,false);
viewer.setTitle("Relatório de Pagamentos");
viewer.setVisible(true);
viewer.show();
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, " Relatorio não localizado " + erro);
}
}
public static void main (String args[])
{
TedCaixa app = new TedCaixa();
}
}
Neste caso, dava tudo certo dentro do NetBeans, mas quando eu rodava o aplicativo o relatorio não era exibido, pois faltava adicionar as bibliotecas ao projeto. Espero que estas informações ajudem alguem assim como me ajudaram. Abraços a todos. Obrigado
Parabéns, cara… A determinação te leva onde quiser chegar!!
Só um comentário sobre a solução que você encontrou: Não há necessidade de adicionar TODAS as bibliotecas que o iReports traz. Aqui em meu projeto, por exemplo uso só estas:
commons-beanutils-1.8.2.jar
commons-collections-3.2.1.jar
commons-digester-1.7.jar
commons-logging-1.1.jar
iText-2.1.7.jar
jasperreports-4.0.0.jar
poi-3.6-20091214.jar
Faço assim desde a versão 3.0.0 do iReport (os jars são os mesmos, apenas versões anteriores).