2

当我启动我的 Swing 对话框布局时,是否在类的 run 方法中执行它会有所不同:

    公共无效运行()
    {
        框架 = 新的 JFrame();
        ...
        框架.setVisible(真);
    }

还是类构造函数?

    公共我的班级
    {
        框架 = 新的 JFrame();
        ...
        框架.setVisible(真);
    }
    公共无效运行()
    {
    }

谢谢

4

2 回答 2

5

是的,这很重要,原因是您应该在 Swing 事件线程(事件调度线程或 EDT)上调用大多数 Swing 代码,包括创建 JFrame。为此,您通常在 Runnable 中创建 Swing GUI,并通过调用以下内容在事件线程上排队 Runnable:

SwingUtilities.invokeLater(new Runnable(){
  public void run() {
     // create your Swing GUI here
     frame = new JFrame();
     ...
     frame.setVisible( true );
  }
});

例外是在 API 中记录为线程安全的 Swing 方法调用,例如repaint()组件的方法。

于 2012-07-25T19:46:44.437 回答
3

这是上下文相关的。正如@hovercraftfullofeels 指出的那样,您需要确保您的所有 UI 代码都在 中执行EDT,包括初始化。

EDT如果您已经InvokeLaterEDT.

最好检查一下EventQueue.isDispatchingThread

于 2012-07-25T20:41:56.497 回答