【问题标题】:Should i call InvokeLater inside a thread created in the EDT?我应该在 EDT 中创建的线程内调用 InvokeLater 吗?
【发布时间】:2015-09-24 18:10:58
【问题描述】:

如果我在 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 不同的线程,因此从它修改 swing 组件是不安全的。所以是的,如果您需要访问 Swing 组件,您应该在 t 中调用 invokeLater()

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2012-02-21
    • 2013-01-27
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多