JFrame 即使在关闭后仍保留应用程序 运行

JFrame keeps application running even after closing

我有一个 class 只有静态方法,其中之一使用 JFrame 对象作为组件打开 JOptionPane 错误消息对话框。

这是 class + 方法:

public class miscMethods
{
    static JFrame errorWindow = null;

    public static void ErrorPopup(String message)
    {
        errorWindow = new JFrame();
        errorWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        errorWindow.setAlwaysOnTop(true);
        JOptionPane.showMessageDialog(errorWindow, message, "Error", JOptionPane.ERROR_MESSAGE);
        errorWindow = null;
    }
}

ErrorPopup 方法在 JavaFX 控制器和其他地方使用,调用方式如下:

import static code.miscMethods.ErrorPopup;
...
ErrorPopup("This is the error message");

问题是,当我在弹出窗口出现后从 window 的 ✕ 关闭程序时,应用程序的进程不会关闭,因为 JFrame 已创建并显示。 我知道 JFrame 是罪魁祸首,所以我添加了 errorWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 但它似乎没有做任何事情,因为程序没有关闭。

本题中:JFrame and why stay running 接受的答案谈论的是非守护线程,但我打开的唯一线程是守护线程,所以除非 JavaFX 打开一个,否则我相信它不可能。

那么,为什么进程一直保持运行,我该如何解决?

我还是 Java 的新手,所以如果我犯了错误 and/or 我的代码显示了不好的做法,请指出它们!

编辑:我正在使用 JFrame,因为我需要 setAlwaysOnTop,因为使用 JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); 打开它而不是在 JavaFX window 之上。如果有更好的方法告诉我。

这个:

errorWindow = null;

没有任何用处,因为对象仍然显示。你想要这个:

errorWindow.dispose();

实际上,更好的是,完全摆脱 errorWindow 并将 null 作为第一个参数传递给 JOptionPane。