【发布时间】:2022-01-23 14:54:01
【问题描述】:
我有一个只有静态方法的类,其中一个使用 JFrame 对象作为组件打开一个 JOptionPane 错误消息对话框。
这是类+方法:
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");
问题是当我在弹出窗口出现后从窗口的✕关闭程序时,应用程序的进程不会关闭,因为 JFrame 已创建并显示。
我知道 JFrame 是罪魁祸首,所以我添加了errorWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
但它似乎什么也没做,因为程序没有关闭。
在这个问题中:JFrame and why stay running 接受的答案是关于非守护线程,但我打开的唯一线程是守护线程,所以除非 JavaFX 打开一个,否则我不会相信。
那么,为什么进程会一直运行,我该如何解决?
我还是 Java 新手,所以如果我犯了错误和/或我的代码显示了不好的做法,请指出来!
编辑:我正在使用 JFrame,因为我需要 setAlwaysOnTop,因为使用
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); 不在 JavaFX 窗口顶部打开它。如果有更好的方法请告诉我。
【问题讨论】:
-
您为什么要同时运行 JavaFX 和 Swing? Swing 和 JavaFX 都有自己的线程
-
“我使用 JFrame 因为...” 但是如果你使用 JavaFX,你根本不应该使用
JOptionPane,你应该使用Alert。我强烈建议您选择一个工具包(Swing 或 JavaFX)并专门使用它。 -
是的,你们是对的。我不知道为什么我首先切换到 Swing,无论如何我取出 JFrame 的东西并放入 Alert 并且它是 alert.show 并且它正在工作。本来可以避免所有这些 JFrame 的东西,但至少我为未来学到了一些新东西。谢谢大家的建议。
-
请遵守 java 命名约定