当JasperViewer出现并关闭时,主框架/父框架也关闭

时间:2013-05-16 06:52:31

标签: java swing jframe jasper-reports

JasperViewer出现并关闭时,主框架/父框架也会关闭。如何防止这种情况?

这是我的代码..

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

4 个答案:

答案 0 :(得分:11)

改变这个: JasperViewer.viewReport(jasperPrint);

JasperViewer.viewReport(jasperPrint, false); 这将正常工作。

答案 1 :(得分:2)

除了致电替代方案外,无需做任何事情:

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

JasperViewer有另一个构造函数/方法调用,它接收布尔参数:exitOnClose

我不知道你是否找到了自己的方法,但我认为这是最好的。

答案 2 :(得分:2)

JasperViewer(jasperPrint, false);    

您必须使用jasperviewer传递false,以便父窗口不会关闭。

答案 3 :(得分:1)

变化:

JasperViewer.viewReport(jasperPrint);

要:

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

JasperViewer似乎正在使用JFrame.EXIT_ON_CLOSE,这将导致System.exit(n)被调用,从而结束JVM。

通过使用JFrame.DISPOSE_ON_CLOSE代替,只有该帧结束&被处置掉了。