【问题标题】:Running a JFrame in thread 0在线程 0 中运行 JFrame
【发布时间】: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


【解决方案1】:

您需要显示代码,但您通过使用 SwingUtilities 在 EDT 上排队来在 EDT 上运行代码:

SwingUtilities.invokeLater(() -> {
    // start your GUI here
});

【讨论】:

  • 我在上面提供了一个示例,其中包括您推荐的内容,但恐怕这没有什么区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多