代码之家  ›  专栏  ›  技术社区  ›  Amine Messaoudi

icepdfcore使JFrame在后台保持打开状态

  •  0
  • Amine Messaoudi  · 技术社区  · 6 年前

    我知道我的问题有点奇怪,但我目前正在开发一个java swing应用程序,它使用icepdfcore从另一个jframe中的文件选择器打开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事件添加到新框架中,但问题仍然存在

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

    不知何故,icepdfcore将父帧锁定,到目前为止,我还没有弄清楚。

    任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Amine Messaoudi    5 年前

    我通过添加 System.exit(0) windowClosed JFrame事件

    这样,所有程序资源都会被销毁,包括由icepdfcore运行的非守护进程

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

    然而,我仍然无法理解这种意外的行为,因为我使用的是4.3.3版本,而错误已经在3.0版本中修复

    推荐文章