问题描述
Mac OS X Catalina
JDK OpenJDK 14.0.2(相同版本14.0.1)
public class PriceUpdateForm extends JPanel {
/* lots of code omitted */
public static void main(String[] args) {
SwingUtilities.invokelater(() -> startGUI());
/* try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
System.exit(17);
} */
}
private static void startGUI() {
final var form = new PriceUpdateForm();
form.j = new JFrame();
form.j.getContentPane().add(form);
form.j.pack();
form.j.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
form.j.setVisible(true);
}
}
直接从命令行(或IntelliJ)调用此类的main
方法时,即使睡眠被注释掉,它也能按预期工作。在您单击关闭按钮之前,该窗口一直保持可见状态,然后程序退出。
相反,当我使用蹦床模式(其中类名是第一个参数,如下所示)时,即使窗口可见,JVM也愿意退出。当窗口立即消失时,我很难调试它,但是如果您取消注释睡眠,则JVM将在3秒钟后退出,并且直到那时窗口都是清晰可见的。
蹦床主要方法摘录
final Class<?> mainClass = Class.forName(args[0]);
final Method mainMethod = mainClass.getDeclaredMethod("main",newArgs.getClass());
mainMethod.invoke(null,new Object[]{newArgs});
newargs
只是原始参数减去零。
我得到了不睡觉的声音,PriceUpdateForm.main
将会退出,但是我不明白为什么它会将Window推倒。那是在GUI线程上创建的。 不是超出范围,或者至少,无论main
的调用方式如何,其范围都应该相同:直接还是通过反射。
有人可以解释这种行为差异吗?我想我可以做长达sleep
年的事情,但这看起来很丑。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)