Dúvidas iReports

6 respostas
B

Pessoal Instalei o iReports versão 1.2.6 na minha máquina.
Criei um relatório através de uma conexão access testei e compilei com sucesso (listagem_relatorios.jasper)

Utilizo o NetBeans 5.0 como ferramenta IDE, quando vou importar as seguintes Lib abaixo:

import java.util.HashMap;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperManager;

import net.sf.jasperreports.view.JasperViewer;

import net.sf.jasperreports.engine.JasperReport;

import java.net.URL;

As seguintes importações acima que estão em negrito e sublinhado não estão funcionando ele informa que o package net.sf.jasperreports não existe.

Como faço para importar as bibliotecas corretas para utilizar o código abaixo:

try {

Connection con = null;
        String dns = "jdbc:odbc:DBQ=d:\\banco.mdb;Driver={Microsoft Access Driver (*.mdb)}";
        String usuario = "";
        String senha = "";
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con = DriverManager.getConnection(dns,usuario,senha);
        
        Statement st = con.createStatement();
        String SQL = "Select * from TProdutos";
        ResultSet rs = st.executeQuery(SQL);
        
        String reportFile="Listagem_produtos.jasper";
        HashMap parametros=new HashMap();
        URL urlFile=getClass().getClassLoader().getResource(reportFile);

        if(urlFile==null)
        {
            throw new Exception("Arquivo " + reportFile + " não localizado");
        }

        JasperReport report=JasperManager.loadReport(urlFile.openStream());
        JasperPrint impressao=JasperManager.fillReport(report,parametros,con);
        JasperViewer viewer=new JasperViewer(impressao,false);
        viewer.setTitle("Listagem de Produtos");
        viewer.setBounds(0,0,400,300);
        viewer.show();

        rs.close();
        st.close();
        con.close();
        
    } 
    catch(SQLException e) {
        e.printStackTrace();
    } 
    catch(ClassNotFoundException e) {
        e.printStackTrace();
    } 
    finally {
    }

Obrigado Galera.

6 Respostas

K

De uma forma simples, copie todas as bibliotecas que contiverem na pasta lib de onde vc instalou seu iReport, para o seu classpath.

Nem todas serão usadas, sendo assim, você pode ir excluindo-as depois. ok?

B

Bom fui até o menu: Tools >> Library Manger
Criei um class path do jar jasperreports-1.2.6.jar adicionei esta library no meu projeto, tudo ok.

Estou com um outro problema agora minha aplicação não esta encontrando o arquivo .jasper

String reportFile=Listagem_produtos.jasper;

HashMap parametros = new HashMap();

URL urlFile = getClass().getClassLoader().getResource(reportFile);
//JOptionPane.showMessageDialog(null,"Caminho: " + urlFile,"Titulo",JOptionPane.PLAIN_MESSAGE);
        
        if(urlFile==null)
        {
            //throw new IOException("Arquivo " + reportFile + " não localizado");
            JOptionPane.showMessageDialog(null,"O Arquivo (" + reportFile + ") não encontrado","ATENÇÃO !!!",JOptionPane.PLAIN_MESSAGE);
        }

A variavel urlFile sempre esta null em qual diretorio eu coloco este arquivo Listagem_produtos.jasper da minha aplicação.

Arvore de Dir esta assim:

SCE
------ build
------------- classes
----------------------- sce

------ dist
----------- lib

-------nbproject
-------------------private

------ src
----------- sce
----------------- Main.java
----------------- Principal.java

------ test

Se puder me dar uma ajuda onde posso colocar este arquivo que eu criei através do iReports, valeu

K

Mantenha o .jasper no mesmo diretório que está sua classe que vai criar o relatório.

Dessa forma use isto para criar seu relatório:

String relJasper = "Listagem_produtos.jasper";
JasperPrint jp = JasperFillManager.fillReport( getClass().getResourceAsStream( relJasper ), parameters, JRs );

O importante é usar getClass().getResourceAsStream(). É o que a maioria dos métodos usam para buscar seu .jasper.

Se ainda tiver dúvidas sobre isso, há vários tópicos falando sobre o assunto. ok?!

B

Este código que gera o relatório esta dentro do evento
private void mnu_listProdActionPerformed(java.awt.event.ActionEvent evt)

Coloquei meu arquivo .jasper dentro da dir onde esta meus arquivos .java esta certo?

Meu código ficou assim:

import java.util.HashMap;

import net.sf.jasperreports.engine.*;

import net.sf.jasperreports.view.JasperViewer;

private void mnu_listProdActionPerformed(java.awt.event.ActionEvent evt) {
try {

Connection con = null;
        String dns = "jdbc:odbc:DBQ=d:\\banco.mdb;Driver={Microsoft Access Driver (*.mdb)}";
        String usuario = "";
        String senha = "";
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con = DriverManager.getConnection(dns,usuario,senha);
        
        Statement st = con.createStatement();
        String SQL = "Select * from TProdutos";
        ResultSet rs = st.executeQuery(SQL);
        
        String reportFile="Listagem_produtos.jasper";
        
        HashMap parametros = new HashMap();
        
        JasperPrint impressao = JasperFillManager.fillReport( getClass().getResourceAsStream( reportFile ), parametros, con); 
        JasperViewer viewer = new JasperViewer(impressao,false);
        viewer.setTitle("Listagem de Produtos");
        viewer.setBounds(0,0,400,300);
        viewer.setVisible(true);

        rs.close();
        st.close();
        con.close();
        
    }
    catch(JRException e) {
        e.printStackTrace();
    } 
    catch(SQLException e) {
        e.printStackTrace();
    } 
    catch(ClassNotFoundException e) {
        e.printStackTrace();
    } 
    finally {
    }

}

ERRO:

Exception in thread AWT-EventQueue-0 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

at net.sf.jasperreports.engine.fill.JRFillTextElement.<clinit>(JRFillTextElement.java:63)

at net.sf.jasperreports.engine.fill.JRFillObjectFactory.getStaticText(JRFillObjectFactory.java:494)

at net.sf.jasperreports.engine.base.JRBaseStaticText.getCopy(JRBaseStaticText.java:93)

at net.sf.jasperreports.engine.fill.JRFillElementGroup.<init>(JRFillElementGroup.java:88)

at net.sf.jasperreports.engine.fill.JRFillElementContainer.<init>(JRFillElementContainer.java:90)

at net.sf.jasperreports.engine.fill.JRFillBand.<init>(JRFillBand.java:77)

at net.sf.jasperreports.engine.fill.JRFillObjectFactory.getBand(JRFillObjectFactory.java:374)

at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:395)

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:57)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:363

UMA INFORMAÇÃO PARA AJUDA:

Minha class ela é herança de JFrame

public class Principal extends javax.swing.JFrame {

Esta faltando alguma Lib já importei as seguintes para meu projeto
commons-collections-2.1.jar
jasperreports-1.2.6.jar

Valeu

K

Muito provavelmente falta importar a bibliteca commons-logging. Por isso te falei para importar todas da pasta lib, pois dependendo do que contém na sua classe que cria o métoda, diferentes bibliotecas serão usadas.

Eu por exemplo, tenho de usar:
jasperreports-1.2.4.jar
commons-logging-1.0.2.jar
commons-javaflow-20060411.jar
commons-collections-2.1.jar
itext-1.3.1.jar

Claro que as versões podem variar.

Outra dica, o erro te diz o que está faltando.
org/apache/commons/logging/LogFactory

B

Importei todos os jars do dir Lib da iReports e esta mostrando este erro, neste caso como faço para detectar o problema.

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2222)

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2235)

at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2703)

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:760)

at java.io.ObjectInputStream.<init>(ObjectInputStream.java:278)

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

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:361)

at sce.Principal.mnu_listProdActionPerformed(Principal.java:494)

at sce.Principal.access$2400(Principal.java:13)

at sce.Principal$25.actionPerformed(Principal.java:416)

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)
Criado 13 de setembro de 2006
Ultima resposta 14 de set. de 2006
Respostas 6
Participantes 2