2013-05-16 11 views
5

Quando un JasperViewer viene visualizzato e lo chiudo, anche il frame principale/genitore si chiude. Come prevenire questo?Quando appare un JasperViewer e lo chiudo, anche il frame principale/genitore chiuso

Questo è il mio codice ..

private void cmdprintidMouseClicked(java.awt.event.MouseEvent evt) {           
     // TODO add your handling code here: 
     try { 
      JasperDesign jasperDesign = JRXmlLoader.load("report12.jrxml"); 
      String sql = "select * from db1 where Company LIKE '" + txtcompany.getText() + "%'"; 
      JRDesignQuery newQuery = new JRDesignQuery(); 
      newQuery.setText(sql); 
      jasperDesign.setQuery(newQuery); 
      JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn); 
      JasperViewer.viewReport(jasperPrint); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e); 
     } 

risposta

1

Cambio:

JasperViewer.viewReport(jasperPrint); 

A:

JasperViewer.viewReport(jasperPrint); 
JasperViewer.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

Sembrerebbe il JasperViewer sta usando JFrame.EXIT_ON_CLOSE che causerà System.exit(n) da chiamare , ponendo così fine alla JVM.

Utilizzando JFrame.DISPOSE_ON_CLOSE, invece, solo quello frame è terminato & eliminato.

+0

Ancora errore. "metodo non statico setDefaultCloseOperation (int) non può essere referenziato da un contesto statico. Aiuta meeeeeeeeeeeeeeeeeeeeeeeee! –

2

Non c'è bisogno di fare qualsiasi cosa, altro che chiamare l'alternativa:

JasperViewer(jasperPrint, **false**); 
JasperViewer.viewReport(jasperPrint, **isExitOnClose**); 

Il JasperViewer ha alternativa costruttore/chiamata di metodo che riceve booleano param: exitOnClose

non so se' Ho trovato la tua strada ma penso che questo sia il migliore.

1
JasperViewer(jasperPrint, false);  

Non vi resta che passare false con jasperviewer quindi la finestra padre non si chiude.

8

Modifica questo: JasperViewer.viewReport(jasperPrint);

al JasperViewer.viewReport(jasperPrint, false); Questo funzionerà correttamente.