【发布时间】:2016-06-07 09:59:03
【问题描述】:
在 Swing-land 中,从静态主方法中调用 SwingUtilities.invokeLater(Runnable) 似乎是一种常见/良好的做法:
public class MyApp extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
void run() {
// What to do here?!?
}
});
// And what to do here?!?
}
}
根据那个方法的JavaDocs:
导致 doRun.run() 在 AWT 事件调度线程上异步执行。这将在处理完所有待处理的 AWT 事件后发生。当应用程序线程需要更新 GUI 时,应使用此方法。在以下示例中,invokeLater 调用将 Runnable 对象 doHelloWorld 在事件调度线程上排队,然后打印一条消息。
但即使在阅读了这篇文章之后,我仍然对在这个 Runnable(我们传递给 invokeLater)中放入什么(具体)代码以及什么代码感到困惑不放在里面。有什么想法吗?
【问题讨论】:
-
In 可以直接或间接地以某种方式更改 UI 或与 UI 交互的任何内容,外部可以进行任何其他操作,尤其是任何阻塞或长时间运行的代码
-
感谢@MadProgrammer (+1) - 您是否有机会通过一些简单的代码示例更新您的评论以作为答案?例如,当您说“in go things that may change the UI...”时,您能举几个具体的例子吗?
-
"你能举几个具体的例子吗?" - 如果它可能以任何方式(直接或间接)改变 UI。一般的经验法则是将任何基于 Swing 的组件视为非线程安全的,并且您不应该有任何问题,开始第二次猜测此规则,您将遇到麻烦,也许不是今天,但很可能是明天。
-
however in that link you posted neither the term "SwingUtilities" nor "Concurrency" show up in any search- 这个想法是让您查看“目录”(顶部的“Trail”链接)以查看 Swing 教程中的“所有”部分。您会发现该主题以及其他有助于解决未来问题的 Swing 主题。
标签: java multithreading swing awt