【问题标题】:Difference between invokeLater/invokeAndWait and asyncExec/syncExecinvokeLater/invokeAndWait 和 asyncExec/syncExec 之间的区别
【发布时间】:2016-10-20 13:19:33
【问题描述】:

我正在开发一个使用 Eclipse RCP 和 Swing 的项目。我看到两对方法invokeLater()/invokeAndWait()asyncExec()/syncExec() 被大量使用。

据我了解,invokeLater()/invokeAndWait() 属于 Swing,asyncExec()/syncExec() 属于 Eclipse。但是这两对方法有什么区别呢?

如果它们都用于在 UI 线程上执行任务,那么它们将任务发布到同一个 UI 线程吗? invokeLater()asyncExec() 可以互换吗?

如果我打电话给例如,是否有任何潜在的陷阱(例如死锁等)? syncExec() 来自invokeAndWait()

【问题讨论】:

    标签: java swing concurrency eclipse-rcp


    【解决方案1】:

    Eclipse 使用 SWT 用户界面,这是一个完全独立于 Swing 的 UI 系统。 asyncExec()/syncExec() 是 SWT 系统的一部分。

    如果您正在编写 Eclipse RCP 或 Eclipse 插件,您应该编写 SWT 代码。

    SWT 确实提供了一种使用 Swing 代码的方法,但这应该是最后的手段。

    由于它们是完全不同的 UI 系统,每个都有自己的事件循环 invokeAndWaitsyncExec 不可互换。当有两个 UI 事件循环运行时,很容易陷入混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      相关资源
      最近更新 更多