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。
我有一个 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。