我应该在EDT中创建的线程中调用InvokeLater吗?

时间:2015-09-24 18:10:59

标签: java multithreading swing user-interface event-dispatch-thread

如果我在edt中创建的线程中修改我的gui会发生什么?

当我说“在edt中创建”时,我实际上说线程声明及其开始是在一个代码块中包围:

SwingUtilities.invokeLater(new Runnable(){

   public void run(){

      Thread t= new Thread(new Runnable(){

         public void run(){

            txtField.setText("setting...");
         }
      });

      t.start();
   }
}

这会修改我的gui而没有副作用吗?或者我应该在Thread“T”中再次调用invokeLater?

1 个答案:

答案 0 :(得分:3)

在EDT中实例化和运行线程无关紧要。它将是一个独立于EDT运行的新线程,因此从它修改GUI是不安全的。必须使用invokeLater()完成所有Swing修改。