【发布时间】:2016-01-31 15:15:32
【问题描述】:
当运行一个创建 JFrame (Swing) 的程序时,为什么如果它在线程 0 上运行它不显示窗口? (OS X) 可以在线程 0 上运行:
java -XstartOnFirstThread Driver
示例
public class Driver
{
public static void main (String args[])
{
SwingUtilities.invokeLater(() -> {
WindowClass button = new WindowClass(450, 450);
});
}
}
public class WindowClass extends JFrame
{
public WindowClass(int width, int height)
{
setTitle("Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(width, height);
setVisible(true);
}
}
【问题讨论】:
-
您的代码既可以按照您编写的方式(从入口线程)运行,也可以按照 Hovercraft 的建议在 EDT 上运行。只是你的方式以后可能会出问题。
-
那么您是否尝试了使用 -XstartOnFirstThread 的代码,它打开了一个 450 x 450 的窗口而没有问题? @user1803551
-
不,我定期按照它在 EDT 上的书写方式启动它。需要明确的是,您并没有尝试在有或没有标志的情况下在 EDT 上运行它。
-
我的问题是解决当您使用 -XstartOnFirstThread 运行它时它不起作用的事实。因此,这个问题的解决方案是让它以与不使用 -XstartOnFirstThread 的方式相同的方式运行,使用 -XstartOnFirstThread。 @user1803551
-
是的,但您没有显示或说您正在尝试在 EDT 上运行它。
标签: java multithreading swing jframe