JAR não carrega IReport.....Help

Desenvolv meu primeiro sistema em Java/MySQL no NetBeans 6.1 (Windows Vista); um aplicação para desktop que vai rodar num XP. Muito bem. Depois que compilei eu ccopiei o sistema (.JAR) para a máquina de destino, instalei o MySQL, transferi os BD’s, iniciei o sistema e verifiquei que conexão estava OK. Me deparei com um problema que ainda não consegui resolver: as telas que geram relatórios não são executadas. Sempre que chamo-as através de um menu…nada…nada acontece. Estou usando o IReport e, quando compilei, coloquei dentro do Jar os arquivos do IReport (sete arquivos). Não sei onde estou errando.

Deu algum erro??

onde você colocou os relatórios?

quais arquivos que você colocou dentro do jar?

Coloquei dentro do JAR os arquivos da aplicação e além de sete JAR do IReport (5 commons…, 1 itext e 1 jasperreport). Não dá erro algum…apenas não carrega/aparece a tela chamada pelo menu. Dentro do NetBeans roda normalmente…

Ajuda aí vai…

Ainda não consegui fazer o programa rodar na máquina onde deverá ser executado o sistema…Dentro do NetBeans tudo funciona perfeitamente…

Posta seu código de execução ae, da sua chamada dos rels para gente ver…

Aí vai o código completo de uma das telas desenvolvida no NetBeans. Essa também não carrega no aplicativo instalado na máquina de destino.

[code]
/*

  • TelaFolhaRosto.java
  • Created on 26 de Outubro de 2009, 16:02
    */
    import java.awt.Color;
    import javax.swing.JOptionPane;
    import java.util.HashMap;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.view.JasperViewer;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.util.JRLoader;
    import java.net.URL;

/**
*

  • @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()); 
     }
    

    }

    private void ImprimeFolhaRosto(){

     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();
        }          
    

    }

    /** 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”)
      //
      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);
      }//

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:
ImprimeFolhaRosto();
}

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                   

}[/code]

Bem pelo q vc disse, vc empacotou os .jasper junto no Jar né?
Qdo vc vai chamar, tem algum caminho para passar? Ou estão todas juntas as classes do sistema, e a chamada de impressão?

Abraços.

[quote=lbvitoriano]Bem pelo q vc disse, vc empacotou os .jasper junto no Jar né?
Qdo vc vai chamar, tem algum caminho para passar? Ou estão todas juntas as classes do sistema, e a chamada de impressão?

Abraços.[/quote]

Desculpe minha ignorância, mas este é o primeiro sistema que desenvolvo em Java + MySQL justamente para tentar aprender a utilização destas ferramentas. Lembro que fiz a configuração do classpath apenas na intalação do Java e do NetBeans. É necessário a indicação do caminho para a aplicação com jasperreport funcionar? Como posso fazer isso?

Olha aparentemente está td certo na chamada dele e tal…mas vc disse q não dá erro nenhum…isso q é esquisito…
Enfim, tente mudar isso…

Ao invés disso…

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

Faça assim…

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

Na verdade não é o relatório que não é chamado. A tela que deveria fazer a chamada do relatório e que não aparece. Todas as outras que não possuem chamada de relatório aparecem normalmente. As que fazem qualquer operação com banco de dados (inclusões/consultas…) estão funcionando normalmente. Apenas as que, de algum modo geram relatórios e que não estão aparecendo. Detalhe. Apenas na máquina de destino. No notebook onde estou desenvolvendo o projeto tudo funciona normalmente. O .JAR gerado no notebook quando instalado no desktop de destino é que apresenta o problema que descrevi.

Humm, então realmente é algum problema no empacotamento do seu jar, vc colocou nele os drivers de conexão a banco de dados? o jasper_reports.jar? Os iText.jar? Swing_layout.jar?

Enfim, é algo neste sentido mesmo…
Eu tinha entendido de outra forma…rsrs

[quote=lbvitoriano]Humm, então realmente é algum problema no empacotamento do seu jar, vc colocou nele os drivers de conexão a banco de dados? o jasper_reports.jar? Os iText.jar? Swing_layout.jar?

Enfim, é algo neste sentido mesmo…
Eu tinha entendido de outra forma…rsrs[/quote]

Inclui na execução do projeto as bibliotecas do jasperreports (7 ao todo - 5 commons, itext e japerreports) e no desespero (essa e a palavra exata) inclui essa bibliotecas no JAR que distribui. Em vão…também não funcionou na máquina de destino.

Em relação ao driver de conexão, existe algum driver específico do relatório que deva ser incluído no JAR?

Não q eu saiba, mesmo pq vc ta usando ele na outra máquina e funciona…
Vc colocou um try catch() na chamada dessa sua tela do menu? E nada de erros, ou algo do tipo?

[quote=lbvitoriano]Não q eu saiba, mesmo pq vc ta usando ele na outra máquina e funciona…
Vc colocou um try catch() na chamada dessa sua tela do menu? E nada de erros, ou algo do tipo?[/quote]

Coloquei e como citei anteriormente, não apresenta erro. Estava lendo neste momento o arquivo README.TXT dentro da pasta DIST, e descobri que não distribui junto com o .JAR as bibliotecas da pasta LIB devidamente compactadas. Este pode ser o erro?

Pode sim…

Tenta ae…

[quote=lbvitoriano]Pode sim…

Tenta ae…[/quote]

Vou tentar…é uma máquina instalada lá no trabalho…vou tentar e mais tarde eu porto o resultado. Muitíssimo obrigado pela atenção lbvitoriano.

Aleluia…Uma parte foi resolvida…As telas são carregadas normalmente e o acesso ao Banco de Dados está OK. O problema que apaareceu agora foi a geração/exibição do relatório. Simplismente não aparece…

Q bom hein, ótimo!
Mas então, nada de erros? O rel não aparece e boa?