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

标签 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 而不会产生副作用吗?或者我应该在线程“T”内再次调用invokeLater?

最佳答案

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

关于java - 我应该在 EDT 中创建的线程内调用 InvokeLater 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768154/

相关文章:

java - 自定义图 - Java Swing

Java/JRuby on Rails 与 .NET 3.5...感觉我做错了

java - 调用 Bundle.getParcelable 时收到 NullPointerException

java - 作为 Windows 服务运行的 Jetty 在关闭后不会清理临时文件

Java 8 : How Lambda expression impacts

java - 自定义 JFileChooser。如何将 JComboBox 添加到 JFileChooser 中

c - 在多线程环境中使用 __sync_bool_compare_and_swap 是否正确?

java - Android线程不在后台运行

c++ - 跨各种线程的unique_lock

java - 3 Swing 应用程序设计 : which is the best?