icepdfcore让JFrame在后台打开

时间:2018-04-01 22:16:11

标签: java pdf background jframe icepdf

我知道我的问题有点奇怪,但我正在开发一个java swing应用程序,它使用icepdfcore从另一个jframe中的filechooser打开pdf

这是我的代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
    JFilechooser filedialog=new JFileChooser();
    filedialog.showOpenDialog(frame);                                         
    File file=filedialog.getSelectedFile();
    SwingController controller = new SwingController();
    SwingViewBuilder factory = new SwingViewBuilder(controller);
    JPanel viewerComponentPanel = factory.buildViewerPanel();
    JFrame window = new JFrame("PDF Viewer");
    window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    window.getContentPane().add(viewerComponentPanel);
    window.setVisible(true);
    controller.openDocument(file.getAbsolutePath());
}

当我选择文件时,它使用icepdfcore正确显示,但问题是当我关闭主框架时,它没有完全关闭,因为我在netbeans中看到它仍然在后台运行,并且是唯一的强制方式通过点击红色方块来杀死它

enter image description here

我将onclosing事件添加到newframe但仍然是问题

window.addWindowListener(new java.awt.event.WindowAdapter()
{
    public void windowClosed(java.awt.event.WindowEvent evt)
    {
        controller.closeDocument();
        //controller.dispose();
        controller.exit();
    }
});

不知何故,icepdfcore保持父框架锁定,到目前为止我还没想到。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我通过向JFrame的System.exit(0)事件添加windowClosed解决了这个问题

这样,所有程序资源都被破坏,包括icepdfcore运行的非守护进程

window.addWindowListener(new java.awt.event.WindowAdapter()
{
    public void windowClosed(java.awt.event.WindowEvent evt)
    {
        System.exit(0);
    }
});

但是,我仍然无法理解这种意外行为,因为我正在使用4.3.3版,并且该错误已在3.0版中得到修复