Como exibir relatorios através de um arquivo .jar no desktop

16 respostas
M

Pessoal estou com uma bomba faz uma semana e não achei ninguém que solucionasse meu problema. Eu criei um projeto contendo formulários, acesso ao BD mysql e geração de relatórios sendo que tudo funciona perfeitamente dentro do netbeans. Porém, quando tento rodar pelo .jar os relatórios não são exibidos e a idéia era colocar um ícone de atalho no desktop para o cliente usar o software. Pelo amor de Deus, alguém sabe como resolvo isso (rsrsrs)?

16 Respostas

drsmachado

Então, provavelmente você tenha feito o que muita gente faz. Colocou o caminho dos relatórios de forma fixa, quando deve ser dinâmico, pois, o usuário pode salvar o arquivo em qualquer lugar.
Posta a classe que chama o relatório, por gentileza.

M

uma coisa assim:

import clarim.bd.CriaConexao;

import java.io.File;

import java.sql.Connection;

import java.util.HashMap;

import net.sf.jasperreports.engine.JasperExportManager;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperPrintManager;

import net.sf.jasperreports.view.JasperViewer;

public class FormRelatorio extends javax.swing.JFrame {

/** Creates new form FormRelatorio */
public FormRelatorio() {
    initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jMenuBar1 = new javax.swing.JMenuBar();
    jMenu3 = new javax.swing.JMenu();
    jMenuItem5 = new javax.swing.JMenuItem();
    jMenuItem6 = new javax.swing.JMenuItem();
    jMenuItem7 = new javax.swing.JMenuItem();
    jMenu4 = new javax.swing.JMenu();
    jMenuItem8 = new javax.swing.JMenuItem();
    jMenuItem9 = new javax.swing.JMenuItem();
    jMenuItem10 = new javax.swing.JMenuItem();
    jMenu1 = new javax.swing.JMenu();
    jMenuItem1 = new javax.swing.JMenuItem();
    jMenuItem2 = new javax.swing.JMenuItem();
    jMenuItem3 = new javax.swing.JMenuItem();
    jMenu2 = new javax.swing.JMenu();
    jMenuItem4 = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Geração do relatório de vendas");
    setBounds(new java.awt.Rectangle(60, 20, 0, 0));

    jPanel1.setBackground(new java.awt.Color(255, 255, 255));

    jLabel1.setIcon(new javax.swing.ImageIcon("C:\\Users\\Junior\\Documents\\NetBeansProjects\\Sistema de Pedidos de Caldos\\src\\clarim\\formulario\\teste.jpg")); // NOI18N

    jLabel2.setFont(new java.awt.Font("Harlow Solid Italic", 2, 48));
    jLabel2.setForeground(new java.awt.Color(102, 0, 102));
    jLabel2.setText("Apresentação de Resultados");

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap(334, Short.MAX_VALUE)
            .addComponent(jLabel1)
            .addGap(354, 354, 354))
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(298, 298, 298)
            .addComponent(jLabel2)
            .addContainerGap(333, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(74, 74, 74)
            .addComponent(jLabel2)
            .addGap(45, 45, 45)
            .addComponent(jLabel1)
            .addContainerGap(98, Short.MAX_VALUE))
    );

    jMenuBar1.setPreferredSize(new java.awt.Dimension(188, 40));

    jMenu3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jMenu3.setForeground(new java.awt.Color(102, 0, 102));
    jMenu3.setText("  Visualização");
    jMenu3.setFont(new java.awt.Font("Segoe UI", 1, 24));
    jMenu3.setPreferredSize(new java.awt.Dimension(180, 36));
    jMenu3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenu3ActionPerformed(evt);
        }
    });

    jMenuItem5.setFont(new java.awt.Font("Segoe UI", 1, 14));
    jMenuItem5.setForeground(new java.awt.Color(102, 0, 102));
    jMenuItem5.setText("Relatório Geral");
    jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem5ActionPerformed(evt);
        }
    });
    jMenu3.add(jMenuItem5);

    jMenuItem6.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem6.setForeground(new java.awt.Color(102, 0, 102));
    jMenuItem6.setText("Relatório por Itens");
    jMenuItem6.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem6ActionPerformed(evt);
        }
    });
    jMenu3.add(jMenuItem6);

    jMenuItem7.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem7.setForeground(new java.awt.Color(102, 0, 102));
    jMenuItem7.setText("Gráficos");
    jMenuItem7.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem7ActionPerformed(evt);
        }
    });
    jMenu3.add(jMenuItem7);

    jMenuBar1.add(jMenu3);

    jMenu4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jMenu4.setForeground(new java.awt.Color(0, 102, 0));
    jMenu4.setText("  Gravação");
    jMenu4.setFont(new java.awt.Font("Segoe UI", 1, 24));
    jMenu4.setPreferredSize(new java.awt.Dimension(145, 36));

    jMenuItem8.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem8.setForeground(new java.awt.Color(0, 102, 0));
    jMenuItem8.setText("Relatório Geral");
    jMenuItem8.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem8ActionPerformed(evt);
        }
    });
    jMenu4.add(jMenuItem8);

    jMenuItem9.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem9.setForeground(new java.awt.Color(0, 102, 0));
    jMenuItem9.setText("Relatório por Itens");
    jMenuItem9.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem9ActionPerformed(evt);
        }
    });
    jMenu4.add(jMenuItem9);

    jMenuItem10.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem10.setForeground(new java.awt.Color(0, 102, 0));
    jMenuItem10.setText("Gráficos");
    jMenuItem10.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem10ActionPerformed(evt);
        }
    });
    jMenu4.add(jMenuItem10);

    jMenuBar1.add(jMenu4);

    jMenu1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jMenu1.setForeground(new java.awt.Color(0, 51, 255));
    jMenu1.setMnemonic('R');
    jMenu1.setText("   Impressão");
    jMenu1.setFont(new java.awt.Font("Segoe UI", 1, 24));
    jMenu1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jMenu1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    jMenu1.setPreferredSize(new java.awt.Dimension(170, 29));

    jMenuItem1.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem1.setForeground(new java.awt.Color(0, 51, 255));
    jMenuItem1.setText("Relatório Geral");
    jMenuItem1.setPreferredSize(new java.awt.Dimension(169, 25));
    jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem1ActionPerformed(evt);
        }
    });
    jMenu1.add(jMenuItem1);

    jMenuItem2.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem2.setForeground(new java.awt.Color(0, 51, 255));
    jMenuItem2.setText("Relatório por Itens");
    jMenuItem2.setPreferredSize(new java.awt.Dimension(169, 25));
    jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem2ActionPerformed(evt);
        }
    });
    jMenu1.add(jMenuItem2);

    jMenuItem3.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
    jMenuItem3.setForeground(new java.awt.Color(0, 51, 255));
    jMenuItem3.setText("Gráficos");
    jMenuItem3.setPreferredSize(new java.awt.Dimension(169, 25));
    jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem3ActionPerformed(evt);
        }
    });
    jMenu1.add(jMenuItem3);

    jMenuBar1.add(jMenu1);

    jMenu2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jMenu2.setForeground(new java.awt.Color(204, 0, 0));
    jMenu2.setMnemonic('F');
    jMenu2.setText(" FIM");
    jMenu2.setFont(new java.awt.Font("Segoe UI", 1, 24));
    jMenu2.setPreferredSize(new java.awt.Dimension(69, 29));
    jMenu2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenu2ActionPerformed(evt);
        }
    });

    jMenuItem4.setFont(new java.awt.Font("Segoe UI", 1, 14));
    jMenuItem4.setForeground(new java.awt.Color(204, 0, 0));
    jMenuItem4.setText("Volta");
    jMenuItem4.setFocusable(true);
    jMenuItem4.setPreferredSize(new java.awt.Dimension(100, 25));
    jMenuItem4.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jMenuItem4MouseClicked(evt);
        }
    });
    jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jMenuItem4ActionPerformed(evt);
        }
    });
    jMenu2.add(jMenuItem4);

    jMenuBar1.add(jMenu2);

    setJMenuBar(jMenuBar1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    pack();
}// </editor-fold>                        

private void jMenu2ActionPerformed(java.awt.event.ActionEvent evt) {                                       
   
}                                      

private void jMenuItem4MouseClicked(java.awt.event.MouseEvent evt) {                                        
    
}                                       

private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {                                           
   FormPrincipal princ = new FormPrincipal();
    princ.setVisible(true);
    dispose();
}                                          

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
          try{
              Connection con = CriaConexao.getConexao();
              HashMap parametros = new HashMap();
              // imprime relatório
              JasperPrint exibe = JasperFillManager.fillReport("./src/clarim/relatorios/RelatorioGeral.jasper", parametros,con);
              JasperPrintManager.printReport(exibe,false);                  
           }catch (Exception e){
              e.printStackTrace();
          }
}                                          

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
     try{     File fileName = new File("./dist/RelatorioGeral.jasper");
              Connection con = CriaConexao.getConexao();
              HashMap parametros = new HashMap();
              JasperPrint exibe = JasperFillManager.fillReport(fileName.getCanonicalPath(), parametros,con);
            //  JasperPrint exibe = JasperFillManager.fillReport("./RelatorioGeral.jasper", parametros,con);
              // visualiza o relatorio
              JasperViewer jv = new JasperViewer(exibe,false);
              jv.setVisible(true);

           }catch (Exception e){
              e.printStackTrace();
          }
}

e por aí vai… o Relatorio Geral so aparece pelo netbeans pelo jar nada…obrigada pela atenção …

M

meu nome é Juliana e estou desesperada porque este é um trabalho de final de semestre e o programa funciona certinho só falta rodar num atalho os relatorios…alguma alma iluminada please…

drsmachado

Ok, em que local você colocou os relatórios?

M

eu coloquei os relatorios numa pasta chamada src/clarim/relatorios…ja coloquei os relatorios na raiz, no dist, dentro do .jar e nada… por gentileza me dê uma luz drsmachado…

M

eu verifiquei que dentro do .jar o netbeans ja colocou todos os .jasper, entao devia reconhecer mas isso nao acontece…

drsmachado

Normalmente, não.
Estou vendo uma forma de solucionar isto.

M

por gentileza olha o manifest abaixo:
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Class-Path:
lib/mysql-connector-java-5.1.6-bin.jar
lib/commons-beanutils-1.7.jar
lib/commons-collections-3.2.1.jar
lib/commons-dbcp-1.2.2.jar
lib/commons-digester-1.7.jar
lib/commons-javaflow-20060411.jar
lib/commons-logging-1.1.jar
lib/commons-math-1.0.jar
lib/commons-pool-1.3.jar
lib/commons-vfs-1.0.jar
lib/iText-2.1.0.jar
lib/jasperreports-3.5.1.jar
lib/jcommon-1.0.15.jar
lib/jfreechart-1.0.12.jar
lib/spring.jar
lib/log4j-1.2.15.jar
log4j.properties
lib/groovy-all-1.5.5.jar

Será que tem a ver com algo aí?
grata…

M

o engraçado é que a conexao com o banco acontece normalmente pelo .jar mas o relatorio nada… sniff

M

alguma mente brilhante me acoooooodeeeeeee…

fabin

Vc colocou o driver do ireport na sua IDE??

Se colocado tenta esse codigo no botão para gerar o relatorio…

HashMap parametros = new HashMap();//defirnir parametros p/ o relatorio]
               
                JasperReport relatorio = JasperCompileManager.compileReport("C:\\ClientesDESDE.jrxml");//endereco onde o relatorio esta
                JasperPrint jp = JasperFillManager.fillReport(relatorio, parametros, con);
                JasperViewer jrv = new JasperViewer(jp);
                jrv.setVisible(true);

v se resolve…

M

fabin em primeiro lugar gostaria de agradecer sua dica, vc foi bastante atencioso comigo, pois, quase ninguem encara este problema. Infelizmente fiz o que vc falou compilando o relatorio no proprio codigo conforme vc indicou inclusive coloquei o .jrxml do relatorio na raiz onde se encontra o manifest mas só gero o relatorio pelo netbeans, pelo .jar que está na pasta dist nao aparece nada. Olha o codigo do botao que chama meu relatorio ae, por gentileza:

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {

try{   //  File fileName = new File("./dist/RelatorioGeral.jasper");

Connection con = CriaConexao.getConexao();

HashMap parametros = new HashMap();

JasperReport relatorio = JasperCompileManager.compileReport("./RelatorioGeral.jrxml");//endereco onde o relatorio esta

//   JasperPrint exibe = JasperFillManager.fillReport(fileName.getCanonicalPath(), parametros,con);

JasperPrint exibe = JasperFillManager.fillReport(relatorio, parametros,con);

// visualiza o relatorio

JasperViewer jv = new JasperViewer(exibe,false);

jv.setVisible(true);
}catch (Exception e){
              e.printStackTrace();
          }
}

É isso né? Se for não resolveu meu problema mas mesmo assim agradeço muitíssimo sua atenção. Ainda continuo na expectativa e aberta a novas sugestões… ai que Deus me ajude pois até quarta-feira terei que entregar meu trabalho…

M

fabin esqueci de responder, que driver do ireport tenho que colocar na IDE? como faço isso? é plugin?

fabin

De uma olhada dentro do diretorio lib na instalaçao do seu ireport…

instala os Jars de lá na sua ide.

Espero ter te ajudado

M

fabin, veja bem, eu peguei todos os jars que estavam na pasta ext e na pasta libs e coloquei na pasta lib do meu projeto, e depois coloquei no class path do manifest esses aqui:
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Class-Path:
lib/mysql-connector-java-5.1.6-bin.jar
lib/commons-beanutils-1.7.jar
lib/commons-collections-3.2.1.jar
lib/commons-dbcp-1.2.2.jar
lib/commons-digester-1.7.jar
lib/commons-javaflow-20060411.jar
lib/commons-logging-1.1.jar
lib/commons-math-1.0.jar
lib/commons-pool-1.3.jar
lib/commons-vfs-1.0.jar
lib/iText-2.1.0.jar
lib/jasperreports-3.5.1.jar
lib/jcommon-1.0.15.jar
lib/jfreechart-1.0.12.jar
lib/spring.jar
lib/log4j-1.2.15.jar
log4j.properties
lib/groovy-all-1.5.5.jar
lib/xalan.jar
Mas ainda nao gero relatorio pelo meu jar. Obrigada viu…esperando mais idéias (rsrsrs)

M

oh my God, alguem me ajude please…

Criado 24 de junho de 2011
Ultima resposta 25 de jun. de 2011
Respostas 16
Participantes 3