【问题标题】:icepdfcore keeps JFrame opened in the backgroundicepdf core 让 JFrame 在后台保持打开状态
【发布时间】:2023-12-31 03:50:01
【问题描述】:

我知道我的问题有点奇怪,但我目前正在开发一个 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中看到它仍在后台运行,并且是强制的唯一方法点击红色方块杀死它

我在新框架中添加了关闭事件,但问题仍然存在

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

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

任何帮助将不胜感激。

【问题讨论】:

  • “它仍在后台运行,而强制杀死它的唯一方法是单击红色方块” - 这更可能表明存在非守护线程仍在运行
  • 3.0 版中有一个bug reported - 您使用的是哪个版本
  • 我使用的是 4.3.3
  • 我添加了 System.exit(0);在父框架的 onclose 事件中,现在它似乎可以工作了,感谢您的帮助

标签: java pdf background jframe icepdf


【解决方案1】:

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

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

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

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

【讨论】:

    最近更新 更多