Dúvidas iReports

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.

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?

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

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?!

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

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

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)