首页 文章

Swing对话框布局:运行方法还是构造函数?

提问于
浏览
1

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

public void run()
    {
        frame = new JFrame();
        ...
        frame.setVisible( true );
    }

还是类构造函数?

public MyClass
    {
        frame = new JFrame();
        ...
        frame.setVisible( true );
    }
    public void run()
    {
    }

谢谢

2 回答

  • 4

    是的,这很重要,原因是你应该在Swing事件线程(Event Dispatch Thread或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() 方法 .

  • 3

    这是背景 . 正如@hovercraftfullofeels指出的那样,您需要确保所有的UI代码都在_779428中执行,包括初始化 .

    如果你已经在 EDT 中运行,那么就不需要使用 InvokeLater (除非你真的想要),否则你必须将回调重新同步回 EDT .

    最好用 EventQueue.isDispatchingThread 查看

相关问题