.Jasper não funciona

32 respostas
C

Já postei este problema esta semana mas como o tópico acabou ficando meio confuso, eu resolvi abrir outro para tentar resolver (peço mil desculpas aos administradores do fórum). O problema é o seguinte: desenvolvi um sistema básico para efetuar um controle no trabalho em NetBeans e MySQL e os relatórios desenvolvi no IReport (Plug-in no NetBeans), tudo isso num notebook com Windows Vista. No notebook, dentro do NetBeans e fora dele, os relatórios funcionan normalmente (adicionei os arquivos do IReport na "lib" e tambem os .jar ao projeto, incluindo também o mysql. connector). Quando fiz a distribuição do sistema para a máquina de destino, os relatórios sisplesmente não iniciam (a máquina tem Windows XP SP2). Já li, reli, tentei de tudo e por isso venho insistentemente pedindo um help. A seguir vai a classe a qual consta um dos relatórios e a conexão.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.sql.*;
/**
 *
 * @author Cláudio Rocha
 */
public class BD {

    public static Connection cnn = null;    
    public static Statement st = null;
    public static ResultSet rs = null;       
    
    public static boolean getConnection()
    {
        try
        {
         Class.forName("com.mysql.jdbc.Driver");
         cnn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/bdantt?user=root&password=lucas&useUnicode=true"); 
         st = (Statement) cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);  
            System.out.println("Conectou");
            return true;                   
        }        
        catch(ClassNotFoundException erro)
        {
            erro.printStackTrace();
            return false;
        }   
        catch(SQLException erro)
        {
            erro.printStackTrace();
            return false;
        }        
    }
    
    public static void close()
    {
        closeResultSet();
        closeStatement();
        closeConnection();
    }
    
    private static void closeConnection()
    {
        try
        {
            cnn.close();
            System.out.println("Desconectou");
        }
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }
    }
    
    private static void closeStatement()
    {
        try
        {
            st.close();
        }     
        catch(Exception e)
        {
            e.printStackTrace();
        }                   
    }

    private static void closeResultSet()
    {
        try
        {
            rs.close();
        }     
        catch(Exception e)
        {
            e.printStackTrace();
        }                   
    }
    
    public static void setResultSet(String sql)
    {
        try
        {
            rs = st.executeQuery(sql);                 
        }
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }        
    } 
    
    public static int runSQL(String sql)
    {
        int quant = 0;
        try
        {
          quant = st.executeUpdate(sql);
        } 
        catch(SQLException erro)
        {
            erro.printStackTrace();
        }   
        return quant;
    }        
}
/*
 * TelaFolhaRosto.java
 *
 * Created on 26 de Outubro de 2009, 16:02
 */
import java.awt.Color;
import java.net.URL;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
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;

/**
 *
 * @author  Cláudio Rocha
 */
public class TelaFolhaRosto extends javax.swing.JFrame {
    
    Color cinzaClaro = new Color(232,232,232); 
    public String varIdNrAI;
    public String varIdNrTal;

    /** Creates new form TelaFolhaRosto */
    public TelaFolhaRosto() {
        initComponents();
        inibeCampos();
    }
    
    private void inibeCampos(){
        
        txtAutuado.setEnabled(false);
        txtAutuado.setBackground(cinzaClaro); 
        cmdImprimir.setEnabled(false);
        cmdLimpar.setEnabled(false); 
    }
    
    private void liberaCampos(){
        
       txtAutuado.setEnabled(true);
       txtAutuado.setBackground(Color.white);
       cmdImprimir.setEnabled(true);
       cmdLimpar.setEnabled(true); 
    }
    
    private void LimpaCampos(){
        
        txtNrAI.setValue(null);       
        txtNrTal.setValue(null);
        txtAutuado.setText("");            
    }
    
    private void pesquisaAI(){
        
        try
        {                   
         String sql = "SELECT NRAI, NRTALAO, AUTUADO FROM TABAIS INNER JOIN TABAUTUADOS USING (IDAUTUADO) " +
         "WHERE NRAI = '" + txtNrAI.getText() + "'AND NRTALAO = '" + txtNrTal.getText() + "'";                         
         BD.setResultSet(sql);       
         if (BD.rs.first())
            {
             liberaCampos();
             txtAutuado.setText(BD.rs.getString("AUTUADO"));
             varIdNrAI =  BD.rs.getString("NRAI"); 
             varIdNrTal = BD.rs.getString("NRTALAO"); 
             cmdImprimir.requestFocus();
            }
         else
            {
             JOptionPane.showMessageDialog(null,"Nº de Auto de Infração Não Cadastrado. Verifique!"); 
             LimpaCampos();
             txtNrAI.requestFocus();
            }
        }
        catch(Exception erro)
        {
         JOptionPane.showMessageDialog(null,"Erro:"+erro.getMessage()); 
        }
    } 
    

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtNrAI = new javax.swing.JFormattedTextField();
        jLabel2 = new javax.swing.JLabel();
        txtNrTal = new javax.swing.JFormattedTextField();
        txtAutuado = new CamposMaiusculas();
        jLabel3 = new javax.swing.JLabel();
        cmdImprimir = new javax.swing.JButton();
        cmdLimpar = new javax.swing.JButton();
        cmdSair = new javax.swing.JButton();

        setTitle("Impressão de Folha de Rosto");
        setResizable(false);

        jPanel1.setBackground(java.awt.Color.white);
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Dados Auto de Infração", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 14))); // NOI18N

        jLabel1.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel1.setText("Nº do AI"); // NOI18N

        txtNrAI.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        try {
            txtNrAI.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("#######")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        txtNrAI.setFont(new java.awt.Font("Arial", 0, 14));
        txtNrAI.setName("txtNrAI"); // NOI18N
        txtNrAI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNrAIActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel2.setText("Nº do Talão"); // NOI18N

        txtNrTal.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        try {
            txtNrTal.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("#####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        txtNrTal.setFont(new java.awt.Font("Arial", 0, 14));
        txtNrTal.setName("txtNrTal"); // NOI18N
        txtNrTal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNrTalActionPerformed(evt);
            }
        });

        txtAutuado.setFont(new java.awt.Font("Arial", 0, 14));
        txtAutuado.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        txtAutuado.setName("txtAutuado"); // NOI18N

        jLabel3.setFont(new java.awt.Font("Arial", 0, 14));
        jLabel3.setText("Nome");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(txtNrAI, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(82, 82, 82)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(txtNrTal, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(151, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(txtAutuado, javax.swing.GroupLayout.PREFERRED_SIZE, 478, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(69, 69, 69))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(27, 27, 27)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtNrAI, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(txtNrTal, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(txtAutuado, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        cmdImprimir.setFont(new java.awt.Font("Arial", 0, 14));
        cmdImprimir.setText("Imprimir");
        cmdImprimir.setName("cmdLimpar"); // NOI18N
        cmdImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdImprimirActionPerformed(evt);
            }
        });

        cmdLimpar.setFont(new java.awt.Font("Arial", 0, 14));
        cmdLimpar.setText("Limpar");
        cmdLimpar.setName("cmdLimpar"); // NOI18N
        cmdLimpar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdLimparActionPerformed(evt);
            }
        });

        cmdSair.setFont(new java.awt.Font("Arial", 0, 14));
        cmdSair.setText("Sair");
        cmdSair.setName("cmdLimpar"); // NOI18N
        cmdSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSairActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addComponent(jPanel1, 0, 577, Short.MAX_VALUE)
                .addContainerGap(23, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(48, Short.MAX_VALUE)
                .addComponent(cmdImprimir, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(77, 77, 77)
                .addComponent(cmdLimpar, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(72, 72, 72)
                .addComponent(cmdSair, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(44, 44, 44))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmdImprimir, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmdLimpar, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmdSair, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(31, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-638)/2, (screenSize.height-289)/2, 638, 289);
    }// </editor-fold>                        

private void txtNrAIActionPerformed(java.awt.event.ActionEvent evt) {                                        
// TODO add your handling code here:
    txtNrTal.requestFocus();
}                                       

private void txtNrTalActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
   pesquisaAI();
    
}                                        

private void cmdImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO add your handling code here:

ImprimirFolhaRosto();
    
//    try
//     {
//        ImprimeFolhaRosto imprimir = new ImprimeFolhaRosto(); 
//        imprimir.ImprimirFolhaRosto(varIdNrAI.toString(), varIdNrTal.toString());
//     }
//    catch(Exception e)
//     {
//        Logger.getLogger(TelaFolhaRosto.class.getName()).log(Level.SEVERE, null, e);
//     }
    
}                                           

private void cmdLimparActionPerformed(java.awt.event.ActionEvent evt) {                                          
// TODO add your handling code here:
    LimpaCampos();
    inibeCampos();
    txtNrAI.requestFocus();
}                                         

private void cmdSairActionPerformed(java.awt.event.ActionEvent evt) {                                        
// TODO add your handling code here:
    TelaFolhaRosto.this.setVisible(false);
}                                       

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaFolhaRosto().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton cmdImprimir;
    private javax.swing.JButton cmdLimpar;
    private javax.swing.JButton cmdSair;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField txtAutuado;
    public javax.swing.JFormattedTextField txtNrAI;
    private javax.swing.JFormattedTextField txtNrTal;
    // End of variables declaration                   

    public void ImprimirFolhaRosto(){
         
         try{
            HashMap<String, String> parameterMap = 
                    new HashMap<String, String>();
            parameterMap.put("PAR_NRAI", varIdNrAI);           
            parameterMap.put("PAR_NRTAL", varIdNrTal);
            URL arquivo = getClass().getResource("FolhaRosto.jasper");
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(arquivo);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, BD.cnn);
            JasperViewer jrviewer = new JasperViewer(jasperPrint,false);
            jrviewer.setVisible(true); 
           }
        catch(JRException e)
           {
            e.printStackTrace();
           } 
    }        
    
    
}

32 Respostas

dudu_sps

Seu arquivo FolhaRosto.jasper está em qual pasta?

C

Coloquei junto do .jar na pasta na qual instalei o sistema na máquina de destino. Nesta mesma pasta eu coloquei a pasta lib.

C

info_god:
Claudio,

Qual erro que esta acontecendo?

Bem provavel que seja a localização do arquivo .jasper, quando vc esta fazendo getClass().getResource(“arquivo.jasper”) vai esta tentando localizar o arquivo no mesmo lugar do .class da classe, o ruim de trabalhar com NetBeans é isso, ele força algumas coisas com suas bibliotecas que fora do netbeans não vai rodar direito.

Att,

Na máquina onde estou desenvolvendo, tanto dentro quanto fora do NetBeans, tudo funciona normalmente. Quando cópio para a máquina de destino, no trabalho, e clico em qualquer botão imprimir, simplesmente o jasperview não abre. è como se o relatório não pudesse ser localizado pelo sistema.

viniciusfaleiro

Conselho de quem ja apanhou muito… Coloca em uma pasta fora do jar (eg. \Reports) e não referencia desse jeito… Cola essa pasta na mesma pasta do jar… dai vc referencia assim:

String jasper_path = ".\Reports\" +  report_name; // (no caso o nomerelatorio.jasper)
dudu_sps

para voce saber qual erro está ocorrendo…
abre o seu jar pelo pronpt de comando

java -jar nomedojar.jar

dai hora que voce tentar abrir o relatório vai acusar o erro

viniciusfaleiro

Outra coisa… se realmente não quiser fazer isso… colocar fora do .jar… (o que pessoalmente acho besteira. Se precisar trocar o .jasper tem q compilar de novo)… é soh passar o caminho assim:

String jasper_path = "MeuRelatorio.jasper";
C

viniciusfaleiro:
Conselho de quem ja apanhou muito… Coloca em uma pasta fora do jar (eg. \Reports) e não referencia desse jeito… Cola essa pasta na mesma pasta do jar… dai vc referencia assim:

String jasper_path = ".\Reports\" +  report_name; // (no caso o nomerelatorio.jasper)

Coloquei o código conforme a seguir:

URL arquivo = getClass().getResource("FolhaRosto.jasper");

É possivel fazer conforme vc falou? Eu estou usando uma para chamada distsist, onde estão o .jar, os .jarper e a pasta lib. Então no caso eu deveria criar outra pasta para separar os .jasper do .jar?

Como ficaria o caminho se fizesse assim? Poderia ser aproveitado o código que postei anteriormente relativo à criação do relatório.

viniciusfaleiro

Cara… da sim… eu uso isso… desde que a paste esteja na mesma pasta do jar… Ex… teu jar esta em c:\ProgramaLegal\prglg.jar … sua pasta de relatorios c:\ProgramaLegal\Reports…

Pra te ajudar… olha como eu uso… se mesmo assim tiver problemas… posta o stacktrace… eu te ajudo… =)… fico xateado tbm qdo tenho algum problema e tenho q ficar postando varias vezes pra me ajudarem…

//O Datasource
            JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(fat);

            //Conexão para subrelatório
            Connection con1 = new BDConection().getCon();

            //RealPath
            String pathJasper = ".\reports\";

            //Parâmetros, se houverem
            Map parametros = new HashMap();

            JasperPrint impressao = null;

            if (tipo_agrupamento == FATURA) {
                parametros.put("SUBREPORT_DIR", pathJasper + "Fatura_CC_subreport1.jasper");
                parametros.put("REPORT_CONNECTION", con1);
                parametros.put("IMPORTACAO", String.valueOf(id_import));
                parametros.put("TB_NAME", tb_name);

                impressao = JasperFillManager.fillReport(pathJasper + "Fatura_CC.jasper", parametros, ds);
            } else if (tipo_agrupamento == CELULAR) {
                parametros.put("SUBREPORT_DIR", pathJasper + "Fatura_Cel_subreport1.jasper");
                parametros.put("REPORT_CONNECTION", con1);
                parametros.put("IMPORTACAO", String.valueOf(id_import));
                parametros.put("TB_NAME", tb_name);

                impressao = JasperFillManager.fillReport(pathJasper + "Fatura_Cel.jasper", parametros, con);
            }


            String document_path = path + ".pdf";

            JasperExportManager.exportReportToPdfFile(impressao, document_path);

            Properties p = new Properties();
            p.load(new FileInputStream("config.properties"));

            String iexplorer = p.getProperty("IEXPLORER") + " " + document_path;

            Runtime.getRuntime().exec(iexplorer);
C

dudu_sps:
para voce saber qual erro está ocorrendo…
abre o seu jar pelo pronpt de comando

java -jar nomedojar.jar

dai hora que voce tentar abrir o relatório vai acusar o erro

Valeu pela dica. Vou tentar e mais tarde, caso não consiga resolver sozinho, eu posto o erro. valeu.

C
viniciusfaleiro:
Cara.. da sim.. eu uso isso... desde que a paste esteja na mesma pasta do jar... Ex... teu jar esta em c:\ProgramaLegal\prglg.jar ... sua pasta de relatorios c:\ProgramaLegal\Reports\...

Pra te ajudar.. olha como eu uso.... se mesmo assim tiver problemas... posta o stacktrace... eu te ajudo... =)... fico xateado tbm qdo tenho algum problema e tenho q ficar postando varias vezes pra me ajudarem....

//O Datasource
            JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(fat);

            //Conexão para subrelatório
            Connection con1 = new BDConection().getCon();

            //RealPath
            String pathJasper = ".\reports\";

            //Parâmetros, se houverem
            Map parametros = new HashMap();

            JasperPrint impressao = null;

            if (tipo_agrupamento == FATURA) {
                parametros.put("SUBREPORT_DIR", pathJasper + "Fatura_CC_subreport1.jasper");
                parametros.put("REPORT_CONNECTION", con1);
                parametros.put("IMPORTACAO", String.valueOf(id_import));
                parametros.put("TB_NAME", tb_name);

                impressao = JasperFillManager.fillReport(pathJasper + "Fatura_CC.jasper", parametros, ds);
            } else if (tipo_agrupamento == CELULAR) {
                parametros.put("SUBREPORT_DIR", pathJasper + "Fatura_Cel_subreport1.jasper");
                parametros.put("REPORT_CONNECTION", con1);
                parametros.put("IMPORTACAO", String.valueOf(id_import));
                parametros.put("TB_NAME", tb_name);

                impressao = JasperFillManager.fillReport(pathJasper + "Fatura_Cel.jasper", parametros, con);
            }


            String document_path = path + ".pdf";

            JasperExportManager.exportReportToPdfFile(impressao, document_path);

            Properties p = new Properties();
            p.load(new FileInputStream("config.properties"));

            String iexplorer = p.getProperty("IEXPLORER") + " " + document_path;

            Runtime.getRuntime().exec(iexplorer);

Vinícius, vou adaptar o código de um dos meu relatórios ao código que vc me passou e, como não estou no trabalho agora, eu testo amanhã cedo e coloco o resultado, qualquer que seja ele. Agradeço muito pela paciência. Eu estou começando agora com o Java e de vez em quando esbarro em coisas que só com a ajuda do pessoal do fórum é possível superar. Valeu.

C

Galera, desculpe o vacilo mas não citei que o sistema era desktop…desculpem…

erico_kl

você ja tentou mapear o .jasper numa InputStream?
tenho todos os .jasper embutidos no jar da aplicação e sempre utilizo InputStream para recuperá-los e executá-los…

dudu_sps

pode dar um exemplo de como usa esse InputStream

erico_kl

try { InputStream is = getClass().getResourceAsStream("/relatorios/relatorio_clientes.jasper"); HashMap parametros = new HashMap(); parametros.put("TITULO", "Relatório de Clientes"); JasperPrint jprint = JasperFillManager.fillReport( is, parametros); //aqui só foram usados 2 parâmetros, o is que é o relatório dentro do jar e o HashMap passando o título do relatório JasperViewer jv = new JasperViewer(jprint, false); jv.setVisible(true); jv.setTitle("Relatório"); jv.setExtendedState(jv.MAXIMIZED_BOTH); jv.setDefaultCloseOperation(jv.DISPOSE_ON_CLOSE); }catch (Exception e) { e.printStackTrace(); }
dessa maneira não é necessário passar uma SQL ou uma conexão para o relatório…

C

erico_kl:
try { InputStream is = getClass().getResourceAsStream("/relatorios/relatorio_clientes.jasper"); HashMap parametros = new HashMap(); parametros.put("TITULO", "Relatório de Clientes"); JasperPrint jprint = JasperFillManager.fillReport( is, parametros); //aqui só foram usados 2 parâmetros, o is que é o relatório dentro do jar e o HashMap passando o título do relatório JasperViewer jv = new JasperViewer(jprint, false); jv.setVisible(true); jv.setTitle("Relatório"); jv.setExtendedState(jv.MAXIMIZED_BOTH); jv.setDefaultCloseOperation(jv.DISPOSE_ON_CLOSE); }catch (Exception e) { e.printStackTrace(); }
dessa maneira não é necessário passar uma SQL ou uma conexão para o relatório…

Vou tentar dessa forma também. Valeu.

C

Não testei ainda mas estou pensando se o InputStream vai funcionar, pois estou trabalhando com relatórios dinâmicos ou seja, com acesso ao banco de dados. As queries estão nos relatórios que, como falei anteriormente, funcionam perfeitamente no NetBeans e fora dele. Só não funcionam quando os exporto para a máquina de destino.

erico_kl

você pode usar o InputStream independentemente se teu relatorio vai possuir uma SQL ou não…
a utilização da InputStream ajuda na hora de você distribuir a aplicação pois os arquivos .jasper não estarão em uma url fixa mas sim dentro do próprio jar do projeto…

dudu_sps

ah.. sinceramente eu não sei o que acontece que não da certo

tentei com o resource.. mas depois que exporto pro jar nunca da certo

at net.sf.jasperreports.engine.fill.JRBaseFiller.<clinit>(JRBaseFiller.java:96)
        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)
        at consultas.ConsultaMoviBanco.gerarEmpresa(ConsultaMoviBanco.java:967)
Hibernate: select cliente0_.CODIGO as CODIGO9_0_, cliente0_.BAIRRO as BAIRRO9_0_, cliente0_.BENS_FIADOR as BENS3_9_0_, cliente0_.CANCELADO as CANCELADO9_0_, cliente0_.COD_CEP as COD5_9_0_, cliente0_.CEP_COBRANCA as CEP6_9_0_, cliente0_.CEP_FIADOR as CEP7_9_0_, cliente0_.COMPLEMENTO as COMPLEME8_9_0_, cliente0_.CPFCNPJ as CPFCNPJ9_0_, cliente0_.CPF_FIADOR as CPF10_9_0_, cliente0_.DATA_CADASTRO as DATA11_9_0_, cliente0_.DATA_NASCIMENTO as DATA12_9_0_, cliente0_.DIA_FECHAMENTO_COBRANCA as DIA13_9_0_, cliente0_.DIA_VENCIMENTO_COBRANCA as DIA14_9_0_, cliente0_.EMAIL as EMAIL9_0_, cliente0_.ENDERECO_COBRANCA as ENDERECO16_9_0_, cliente0_.ENDERECO_FIADOR as ENDERECO17_9_0_, cliente0_.ESTADO_CIVIL as ESTADO18_9_0_, cliente0_.FANTASIA as FANTASIA9_0_, cliente0_.FAX as FAX9_0_, cliente0_.TEFONE_FIADOR as TEFONE21_9_0_, cliente0_.INATIVO as INATIVO9_0_, cliente0_.INSCRICAOESTADUAL as INSCRIC23_9_0_, cliente0_.VENDA_LIMITE as VENDA24_9_0_, cliente0_.MAE as MAE9_0_, cliente0_.NACIONALIDADE as NACIONA26_9_0_, cliente0_.NATURALIDADE as NATURAL27_9_0_, cliente0_.NOME_FIADOR as NOME28_9_0_, cliente0_.NUMERO as NUMERO9_0_, cliente0_.OBSERVACAO as OBSERVACAO9_0_, cliente0_.PAGINA as PAGINA9_0_, cliente0_.PAI as PAI9_0_, cliente0_.PROFISSAO_FIADOR as PROFISSAO33_9_0_, cliente0_.RAZAOSOCIAL as RAZAOSO34_9_0_, cliente0_.REFERENCIA_GARANTIA as REFERENCIA35_9_0_, cliente0_.REFERENCIA_TELEFONE_COMERCIAL1 as REFERENCIA36_9_0_, cliente0_.REFERENCIA_TELEFONE_COMERCIAL2 as REFERENCIA37_9_0_, cliente0_.REFERENCIA_TELEFONE_PESSOAL as REFERENCIA38_9_0_, cliente0_.RENDA_FIADOR as RENDA39_9_0_, cliente0_.REQUESICAO as REQUESICAO9_0_, cliente0_.RG_FIADOR as RG41_9_0_, cliente0_.RUA as RUA9_0_, cliente0_.SEXO as SEXO9_0_, cliente0_.SUB_TIPO_CLIENTE as SUB44_9_0_, cliente0_.SUB_TIPO_FORNECEDOR as SUB45_9_0_, cliente0_.TELEFONE as TELEFONE9_0_, cliente0_.TELEFONE_COBRANCA as TELEFONE47_9_0_, cliente0_.TIPO_CLIENTE as TIPO48_9_0_, cliente0_.TIPO_FORNECEDOR as TIPO49_9_0_, cliente0_.TIPO_FUNCIONARIO as TIPO50_9_0_, cliente0_.TIPO_TRANSPORTE as TIPO51_9_0_, cliente0_.VENDA_BOLETO as VENDA52_9_0_, cliente0_.VENDA_CARTAO as VENDA53_9_0_, cliente0_.VENDA_CHEQUE as VENDA54_9_0_, cliente0_.VENDA_CONTROLE as VENDA55_9_0_, cliente0_.VENDA_DUPLICATA as VENDA56_9_0_, cliente0_.VENDA_FINANCEIRA as VENDA57_9_0_, cliente0_.VENDA_PROMISSORIA as VENDA58_9_0_ from CAD_CLIENTE cliente0_ where cliente0_.CODIGO=?
        at consultas.ConsultaMoviBanco$20.actionPerformed(ConsultaMoviBanco.java:932)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
Hibernate: select tipodoc0_.CODIGO as CODIGO35_0_, tipodoc0_.CANCELADO as CANCELADO35_0_, tipodoc0_.CAUSA_CANCELADO as CAUSA3_35_0_, tipodoc0_.DESCRICAO as DESCRICAO35_0_ from CAD_TIPO_DOC tipodoc0_ where tipodoc0_.CODIGO=?
Hibernate: select tipomovi0_.CODIGO as CODIGO27_0_, tipomovi0_.COD_DESC as COD2_27_0_, tipomovi0_.DESCRICAO as DESCRICAO27_0_, tipomovi0_.MODALIDADE as MODALIDADE27_0_ from CAD_TIPO_MOV tipomovi0_ where tipomovi0_.CODIGO=?
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5806)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        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:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 32 more
meu metodo que instancia está assim oh
public JasperPrint gerarEmpresa() {   
        JasperPrint rel = null;   
        try   
        {   
        	conectar();
            InputStream is = getClass().getResourceAsStream("/reports/Relatorio_movimentacao.jasper");
	        Map map = new HashMap();  
	        
	        map.put("data", data()+" and "+pago()+" and "+conta()+" and moviment_conta_pagar.CANCELADO = 'N'");
	        map.put("SQ",dat()); 
	        //JOptionPane.showMessageDialog(null, saldo()+" pago = "+pago()+" conta = "+conta()+" data = "+data());
	        map.put("saldo",saldo());
	        rel = JasperFillManager.fillReport(is, map, conn);
            
	            //JOptionPane.showMessageDialog(null, conta()+" - "+pago()+" - "+data());
        }   
        catch (JRException e) {   
            JOptionPane.showMessageDialog(null, "Erro ao chamar o relatorio: "+e);
            e.printStackTrace();   
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao chamar o relatorio: "+e);
            e.printStackTrace();
        }
        return rel;   
    }
e o evento do botão está assim
JasperViewer jv = new JasperViewer(gerarEmpresa(), false);
                    jv.setVisible(true);
                    jv.setTitle("Relatório");
                    jv.setExtendedState(jv.MAXIMIZED_BOTH);
                    jv.setDefaultCloseOperation(jv.DISPOSE_ON_CLOSE);

sendo que tem a pasta src e dentro dela tem a pasta reports

C

viniciusfaleiro:
Outra coisa… se realmente não quiser fazer isso… colocar fora do .jar… (o que pessoalmente acho besteira. Se precisar trocar o .jasper tem q compilar de novo)… é soh passar o caminho assim:

String jasper_path = "MeuRelatorio.jasper";

Essa sua dica foi muito útil. Durante a execução, quando solicitava a execução do relatório, a seguinte mensagem era exibida na prompt:

net.sf.jasperreports.engine.JRException: Byte data not found at location : C:\LivroJava6\Testes\ANTT\src\BrasaoRep.gif at net.sf.jasperreports.engine.util.JRLoader.loadBytesFromLocation(JRLoa der.java:488) at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRender er.java:180) at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImag e.java:948) at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.jav a:895) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFi llElementContainer.java:260) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java: 486) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillTitle(JRVertica lFiller.java:312) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRV erticalFiller.java:248) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVertic alFiller.java:114) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java: 911) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java: 814) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63 ) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillMa nager.java:421) at TelaFolhaRosto.ImprimirFolhaRosto(TelaFolhaRosto.java:323) at TelaFolhaRosto.cmdImprimirActionPerformed(TelaFolhaRosto.java:264) at TelaFolhaRosto.access$200(TelaFolhaRosto.java:21) at TelaFolhaRosto$3.actionPerformed(TelaFolhaRosto.java:194) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour ce) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

O mais estranho é que, mesmo alterando o caminho original da figura (C:\LivroJava6\Testes\ANTT\src\BrasaoRep.gif), que corresponde ao local onde estava arquivada a figura durante a etapa de desenvolvimento, para um local onde vai ocorrer a execução (coloquei as figuras na pasta ‘lib’), compilando o relatório e criando outro .jar, ele sempre mostra o primeiro caminho, como se nenhuma alteração tivesse sido feita. Alguém tem alguma dica?

C

Tô pesquisando o erro na internet e desconfio que é algo relacionado a classpath.

erico_kl
dudu_sps:
ah.. sinceramente eu não sei o que acontece que não da certo

tentei com o resource.. mas depois que exporto pro jar nunca da certo

at net.sf.jasperreports.engine.fill.JRBaseFiller.<clinit>(JRBaseFiller.java:96)
        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)
        at consultas.ConsultaMoviBanco.gerarEmpresa(ConsultaMoviBanco.java:967)
Hibernate: select cliente0_.CODIGO as CODIGO9_0_, cliente0_.BAIRRO as BAIRRO9_0_, cliente0_.BENS_FIADOR as BENS3_9_0_, cliente0_.CANCELADO as CANCELADO9_0_, cliente0_.COD_CEP as COD5_9_0_, cliente0_.CEP_COBRANCA as CEP6_9_0_, cliente0_.CEP_FIADOR as CEP7_9_0_, cliente0_.COMPLEMENTO as COMPLEME8_9_0_, cliente0_.CPFCNPJ as CPFCNPJ9_0_, cliente0_.CPF_FIADOR as CPF10_9_0_, cliente0_.DATA_CADASTRO as DATA11_9_0_, cliente0_.DATA_NASCIMENTO as DATA12_9_0_, cliente0_.DIA_FECHAMENTO_COBRANCA as DIA13_9_0_, cliente0_.DIA_VENCIMENTO_COBRANCA as DIA14_9_0_, cliente0_.EMAIL as EMAIL9_0_, cliente0_.ENDERECO_COBRANCA as ENDERECO16_9_0_, cliente0_.ENDERECO_FIADOR as ENDERECO17_9_0_, cliente0_.ESTADO_CIVIL as ESTADO18_9_0_, cliente0_.FANTASIA as FANTASIA9_0_, cliente0_.FAX as FAX9_0_, cliente0_.TEFONE_FIADOR as TEFONE21_9_0_, cliente0_.INATIVO as INATIVO9_0_, cliente0_.INSCRICAOESTADUAL as INSCRIC23_9_0_, cliente0_.VENDA_LIMITE as VENDA24_9_0_, cliente0_.MAE as MAE9_0_, cliente0_.NACIONALIDADE as NACIONA26_9_0_, cliente0_.NATURALIDADE as NATURAL27_9_0_, cliente0_.NOME_FIADOR as NOME28_9_0_, cliente0_.NUMERO as NUMERO9_0_, cliente0_.OBSERVACAO as OBSERVACAO9_0_, cliente0_.PAGINA as PAGINA9_0_, cliente0_.PAI as PAI9_0_, cliente0_.PROFISSAO_FIADOR as PROFISSAO33_9_0_, cliente0_.RAZAOSOCIAL as RAZAOSO34_9_0_, cliente0_.REFERENCIA_GARANTIA as REFERENCIA35_9_0_, cliente0_.REFERENCIA_TELEFONE_COMERCIAL1 as REFERENCIA36_9_0_, cliente0_.REFERENCIA_TELEFONE_COMERCIAL2 as REFERENCIA37_9_0_, cliente0_.REFERENCIA_TELEFONE_PESSOAL as REFERENCIA38_9_0_, cliente0_.RENDA_FIADOR as RENDA39_9_0_, cliente0_.REQUESICAO as REQUESICAO9_0_, cliente0_.RG_FIADOR as RG41_9_0_, cliente0_.RUA as RUA9_0_, cliente0_.SEXO as SEXO9_0_, cliente0_.SUB_TIPO_CLIENTE as SUB44_9_0_, cliente0_.SUB_TIPO_FORNECEDOR as SUB45_9_0_, cliente0_.TELEFONE as TELEFONE9_0_, cliente0_.TELEFONE_COBRANCA as TELEFONE47_9_0_, cliente0_.TIPO_CLIENTE as TIPO48_9_0_, cliente0_.TIPO_FORNECEDOR as TIPO49_9_0_, cliente0_.TIPO_FUNCIONARIO as TIPO50_9_0_, cliente0_.TIPO_TRANSPORTE as TIPO51_9_0_, cliente0_.VENDA_BOLETO as VENDA52_9_0_, cliente0_.VENDA_CARTAO as VENDA53_9_0_, cliente0_.VENDA_CHEQUE as VENDA54_9_0_, cliente0_.VENDA_CONTROLE as VENDA55_9_0_, cliente0_.VENDA_DUPLICATA as VENDA56_9_0_, cliente0_.VENDA_FINANCEIRA as VENDA57_9_0_, cliente0_.VENDA_PROMISSORIA as VENDA58_9_0_ from CAD_CLIENTE cliente0_ where cliente0_.CODIGO=?
        at consultas.ConsultaMoviBanco$20.actionPerformed(ConsultaMoviBanco.java:932)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
Hibernate: select tipodoc0_.CODIGO as CODIGO35_0_, tipodoc0_.CANCELADO as CANCELADO35_0_, tipodoc0_.CAUSA_CANCELADO as CAUSA3_35_0_, tipodoc0_.DESCRICAO as DESCRICAO35_0_ from CAD_TIPO_DOC tipodoc0_ where tipodoc0_.CODIGO=?
Hibernate: select tipomovi0_.CODIGO as CODIGO27_0_, tipomovi0_.COD_DESC as COD2_27_0_, tipomovi0_.DESCRICAO as DESCRICAO27_0_, tipomovi0_.MODALIDADE as MODALIDADE27_0_ from CAD_TIPO_MOV tipomovi0_ where tipomovi0_.CODIGO=?
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5806)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        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:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 32 more
meu metodo que instancia está assim oh
public JasperPrint gerarEmpresa() {   
        JasperPrint rel = null;   
        try   
        {   
        	conectar();
            InputStream is = getClass().getResourceAsStream("/reports/Relatorio_movimentacao.jasper");
	        Map map = new HashMap();  
	        
	        map.put("data", data()+" and "+pago()+" and "+conta()+" and moviment_conta_pagar.CANCELADO = 'N'");
	        map.put("SQ",dat()); 
	        //JOptionPane.showMessageDialog(null, saldo()+" pago = "+pago()+" conta = "+conta()+" data = "+data());
	        map.put("saldo",saldo());
	        rel = JasperFillManager.fillReport(is, map, conn);
            
	            //JOptionPane.showMessageDialog(null, conta()+" - "+pago()+" - "+data());
        }   
        catch (JRException e) {   
            JOptionPane.showMessageDialog(null, "Erro ao chamar o relatorio: "+e);
            e.printStackTrace();   
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao chamar o relatorio: "+e);
            e.printStackTrace();
        }
        return rel;   
    }
e o evento do botão está assim
JasperViewer jv = new JasperViewer(gerarEmpresa(), false);
                    jv.setVisible(true);
                    jv.setTitle("Relatório");
                    jv.setExtendedState(jv.MAXIMIZED_BOTH);
                    jv.setDefaultCloseOperation(jv.DISPOSE_ON_CLOSE);

sendo que tem a pasta src e dentro dela tem a pasta reports


confere se realmente os relatórios estão no jar.. e o nome do relatório também deve ser igual ao passado no código..
se isso conferir o problema não está na chamada do relatório

C

Pô Erico, tem alguma susgestão em relação ao erro que postei?

net.sf.jasperreports.engine.JRException: Byte data not found at location :
erico_kl

[quote=Cl?dio Rocha]Pô Erico, tem alguma susgestão em relação ao erro que postei?

net.sf.jasperreports.engine.JRException: Byte data not found at location :

como você está chamando o .jasper?

C

Tá na página anterior…

C

Aí a chamada....

public void ImprimirFolhaRosto(){   
           
         try{   
            HashMap<String, String> parameterMap =   
                    new HashMap<String, String>();   
            parameterMap.put("PAR_NRAI", varIdNrAI);             
            parameterMap.put("PAR_NRTAL", varIdNrTal);   
            URL arquivo = getClass().getResource("FolhaRosto.jasper");   
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(arquivo);   
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, BD.cnn);   
            JasperViewer jrviewer = new JasperViewer(jasperPrint,false);   
            jrviewer.setVisible(true);   
           }   
        catch(JRException e)   
           {   
            e.printStackTrace();   
           }   
    }
dudu_sps

O Erro agora ta o seguinte

eu coloquei tudo que tinha pra por no classpath de jasper e ireport

o erro é esse
o que será q e´

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError 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:234) at dialogo.ImprimeRecibo.gerarEmpresa(ImprimeRecibo.java:573) at dialogo.ImprimeRecibo$11.actionPerformed(ImprimeRecibo.java:438) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.AbstractButton.doClick(AbstractButton.java:337) at dialogo.ImprimeRecibo$12.keyPressed(ImprimeRecibo.java:450) at java.awt.Component.processKeyEvent(Component.java:5999) at javax.swing.JComponent.processKeyEvent(JComponent.java:2799) at java.awt.Component.processEvent(Component.java:5818) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661) at java.awt.Component.dispatchEventImpl(Component.java:4285) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: org.apache.commons.logging.LogConfigurationException: java.lang.reflect.InvocationTargetException at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:532) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395) at net.sf.jasperreports.engine.fill.JRBaseFiller.<clinit>(JRBaseFiller.java:96) ... 36 more Caused by: java.lang.reflect.InvocationTargetException 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:513) at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:525) ... 40 more Caused by: java.lang.NoSuchFieldError: level at org.apache.log4j.spi.RootLogger.setLevel(RootLogger.java:65) at org.apache.log4j.spi.RootLogger.<init>(RootLogger.java:44) at org.apache.log4j.LogManager.<clinit>(LogManager.java:78) at org.apache.log4j.Logger.getLogger(Logger.java:103) at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:102)

C

Pô galera, na boa…passou-se aqui a tratarmos dois erros paralelamente…seria legal abrir outro tópico para não confundir que está disposto a ajudar…

erico_kl
Cl?dio Rocha:
Aí a chamada....
public void ImprimirFolhaRosto(){   
           
         try{   
            HashMap<String, String> parameterMap =   
                    new HashMap<String, String>();   
            parameterMap.put("PAR_NRAI", varIdNrAI);             
            parameterMap.put("PAR_NRTAL", varIdNrTal);   
            URL arquivo = getClass().getResource("FolhaRosto.jasper");   
            JasperReport jasperReport = (JasperReport)JRLoader.loadObject(arquivo);   
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, BD.cnn);   
            JasperViewer jrviewer = new JasperViewer(jasperPrint,false);   
            jrviewer.setVisible(true);   
           }   
        catch(JRException e)   
           {   
            e.printStackTrace();   
           }   
    }
por que você não tenta com InputStream? outra.. o seu relatório está diretamente na pasta src?
URL arquivo = getClass().getResource("FolhaRosto.jasper");
C

Eu ainda não tentei com InputStream mas será que funcionaria. Ao que me parece (ainda estou pesquisando na internet) o relatório não consegue encontrar a imagem no caminho em que está configurado. Eu mudei o caminho da imagem no IReport e compilei mas ainda assim não funcionou. Me parece que tem algum outro lugar que possui essa configuração e eu ainda não consegui encontrar esse lugar. Já olhei as váriaveis de ambiente e sistema e o IReport.ini e não encontrei nada.

C

Eu criei dentro do projeto uma pasta para relatórios, mas no NetBeans funciona tudo legal…o problema está quando copio em outra máquina…Ah…quando eu apago as imagens que estão na pasta src na máquina que estou desenvolvendo o erro também aparece.

I

Claudio,

Qual erro que esta acontecendo?

Bem provavel que seja a localização do arquivo .jasper, quando vc esta fazendo getClass().getResource(“arquivo.jasper”) vai esta tentando localizar o arquivo no mesmo lugar do .class da classe, o ruim de trabalhar com NetBeans é isso, ele força algumas coisas com suas bibliotecas que fora do netbeans não vai rodar direito.

Att,

I

relaxa q todo mundo perecebeu q era :smiley:

Criado 22 de dezembro de 2009
Ultima resposta 22 de dez. de 2009
Respostas 32
Participantes 5