JasperViewer (iRep) fecha a aplicação toda quando fechado

11 respostas
S

Olá,

O iReport está funcionando normalmente mas quando eu fecho a tela de visualização do relatório, ele está fechando toda a aplicação. Abaixo é o método que chama a classe do relatório:
private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        try {
            rel_MicroAgenda relatorio = new rel_MicroAgenda();
            relatorio.setRelatorio();
        } 
        catch (JRException e) {
            JOptionPane.showMessageDialog(null, "Ocorreram erros.\n\nMensagem: "+ e.getMessage(), "Erro", 0);
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Ocorreram erros.\n\nMensagem: "+ e.getMessage(), "Erro", 0);
        }
    }
Essa é a classe do relatório:
/*
 * rel_MicroAgenda.java
 *
 * Created on 17 de Janeiro de 2005, 05:14
 */

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.fill.*;
import net.sf.jasperreports.view.*;
import java.sql.*; 
import java.util.*;
import javax.swing.JInternalFrame;

/**
 *
 * @author macog
 */
public class rel_MicroAgenda {
   
    private Connection con;
    Conexao conexao = new Conexao();
    private Statement stm;

    /** Creates a new instance of rel_MicroAgenda */
    public rel_MicroAgenda() {        
    }
    
    public void setRelatorio() throws JRException, Exception {
        conexao.setConn();
        con = conexao.getConn();
        stm = con.createStatement();
        
        String Query = new String();
        Query = "SELECT nome, telefone FROM miniagenda ORDER BY nome ASC";
        ResultSet result = stm.executeQuery(Query);
        
        JRResultSetDataSource jrResult = new JRResultSetDataSource(result);
        
        Map parameters = new HashMap(); 
        
        JasperFillManager.fillReportToFile("reports/rel_MicroAgenda.jasper", parameters, jrResult);
   
        /* Visualiza o relatório */ 
        JasperViewer.viewReport("reports/rel_MiniAgenda.jrprint", false);
    }
    
}

11 Respostas

F

Kra, perdão por não puder ajudar. Pelo contrário, usando sua boa vontade, pergunto: sabes algum material ou Livro que possa ler para saber usar o iReport??? Estou desesperadamente precisando.
Novamente, me desculpe e obrigado.
Ateh.
Nos veremos.

S

E ae formiga!
Tem esse artigo aqui, é um tesão… muito bom mesmo.

http://www.j2b.com.br/abstract/index.php?op=ViewArticle&articleId=7&blogId=1

S

Eu adicionei a seguinte linha no primeiro método:
relatorio.setDefaultCloseOperation(relatorio.DO_NOTHING_ON_CLOSE);
ficando assim o método:

try { rel_MicroAgenda relatorio = new rel_MicroAgenda(); relatorio.setDefaultCloseOperation(relatorio.DO_NOTHING_ON_CLOSE); relatorio.setRelatorio();

e também essa linha
relatorio.setDefaultCloseOperation(relatorio.DISPOSE_ON_CLOSE);
ficando assim:

try { rel_MicroAgenda relatorio = new rel_MicroAgenda(); relatorio.setDefaultCloseOperation(relatorio.DISPOSE_ON_CLOSE); relatorio.setRelatorio();

Sem sucesso… ao fechar a janela do JasperViewer a minha aplicação toda ainda continua sendo finalizada…

S

BINGO!
Está resolvido!

Eu havia esquecido de colocar um atributo boolean no contrutor da janela do JasperViewer, na classe do relatorio a linha que era assim:

JasperViewer.viewReport("reports/rel_MiniAgenda.jrprint", false);

deveria estar assim:

JasperViewer.viewReport("reports/rel_MiniAgenda.jrprint", false, false);

e pronto… caso resolvido.

e viva o JavaDoc!!!

:slight_smile: :grin:

A

Estou com um problema parecido com o seu. Ao fechar o relátório pelo JasperViewer toda a aplicação é fechada.

abaixo segue o código que chama o relatório,
o relatório é chamado através de um botão.

private void bt_relbensActionPerformed(java.awt.event.ActionEvent evt) { try{ con.conecta(); con.executeSQL("SELECT m.cod_material,m.nomematerial,m.qtde,pt_fornecedor.nomefornecedor " +"FROM pt_material m " +"inner join pt_fornecedor " +"on m.idfornecedor = pt_fornecedor.id_fornecedor"); JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset); HashMap parametros = new HashMap(); JasperPrint jp = JasperFillManager.fillReport("./jasper/relBens.jasper", parametros, jrRS); JasperViewer jrv = new JasperViewer(jp); jrv.setVisible(true); } catch(Exception e){ e.printStackTrace(); } }

Alguém poderia ajudar.

D

Seis anos depois…
abdneto, configure a “default close operation” do JFrame que contém o JasperViewer como DISPOSE_ON_CLOSE.

seuJFrame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

[]´s

A

davidbuzatto, verdade seis anos. kkk.

Já está setado o DefaultCloseOperation do JFrame nas propriedades do frame no netbeans.
eu acho q é alguma coisa no código, só q ainda não identifiquei oq.

D

abdneto:
davidbuzatto, verdade seis anos. kkk.

Já está setado o DefaultCloseOperation do JFrame nas propriedades do frame no netbeans.
eu acho q é alguma coisa no código, só q ainda não identifiquei oq.

Olá,

Então, o JasperViewer é um JFrame.
Faça assim, antes de chamar o jrv.setVisible(true);

jrv.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

Ou então, ao construir o JasperViewer, faça assim:

// o segundo parâmetro desse construtor é um boolean que informa se é para finalizar a JVM ao fechar o JasperViewer (true) ou não (false) JasperViewer jrv = new JasperViewer(jp, false);
Dê uma olhada nos construtores da classe JasperViewer na documentação: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/view/JasperViewer.html

[]´s

A

Nem precisou olhar a documentação agora, pq a segunda opção que vc me forneceu
funcionou blz. Mas vou dar uma olhada na documentação caso precise de outra coisa.

// o segundo parâmetro desse construtor é um boolean que informa se é para sair ao fechar (true) ou não (false) JasperViewer jrv = new JasperViewer(jp, false);

Mto Obrigado, vlw pela força. e essa não é a primeira vez que vc me ajuda, já li um tutorial no seu wordpress
sobre Jasper e me ajudou bastante.

vlw []'s

D

Legal Neto! Obrigado por prestigiar o Blog!
Falando no blog, ontem e hoje eu publiquei as partes 4 e 5 do tutorial sobre relatórios.
Depois dê uma conferida :wink:

Abraço!

M
Olá abdneto o mesmo cabelo-seco acontecia com minha aplicacao, a dica do davibuzzato foi excelente
public relAcao() {
  try 
  {
      con.conecta();
      con.executeSQL("SELECT * from acoes");
      JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);
      JasperPrint jasperPrint = JasperFillManager.fillReport(
      "relatorio/rel02.jasper", new HashMap(), jrRS);
      JasperViewer.viewReport(jasperPrint,false);// depois de "jasperPrint" coloquei um ",false" esse meu modelo é diferente do seu, mas talvez sirva pra te dar uma "luz"
       // qualquer duvida de como cheguei a esse codigo posta ai. falow
    
  } catch (Exception erro){
             JOptionPane.showMessageDialog(null,"Não Conectou ="+erro);
   }
}
depois de "jasperPrint" coloquei um ",false" esse meu modelo é diferente do seu, mas talvez sirva pra te dar uma "luz", qualquer duvida de como cheguei a esse codigo posta ai, juntos agente "mata esse cachorro doido".rs Parabens Davi pelo blog, ja add no meu favoritos.
Criado 17 de janeiro de 2005
Ultima resposta 3 de jul. de 2011
Respostas 11
Participantes 5