gpt4 book ai didi

java - invokeLater/invokeAndWait 和 asyncExec/syncExec 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:32 27 4
gpt4 key购买 nike

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

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

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

如果我调用 e.g. 是否有任何潜在的陷阱(例如死锁等) syncExec() 来自 invokeAndWait()

最佳答案

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

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

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

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

关于java - invokeLater/invokeAndWait 和 asyncExec/syncExec 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40155636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com