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)?
Como exibir relatorios através de um arquivo .jar no desktop
16 Respostas
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.
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 …
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…
Ok, em que local você colocou os relatórios?
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…
eu verifiquei que dentro do .jar o netbeans ja colocou todos os .jasper, entao devia reconhecer mas isso nao acontece…
Normalmente, não.
Estou vendo uma forma de solucionar isto.
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…
o engraçado é que a conexao com o banco acontece normalmente pelo .jar mas o relatorio nada… sniff
alguma mente brilhante me acoooooodeeeeeee…
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…
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…
fabin esqueci de responder, que driver do ireport tenho que colocar na IDE? como faço isso? é plugin?
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
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)
oh my God, alguem me ajude please…