- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在此处作为答案给出的许多 Swing 片段中,有一个对 SwingUtilities#invokeLater
的调用来自 main
方法:
public class MyOneClassUiApp {
private constructUi() {
// Some Ui related Code
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MyOneClassUiApp().constructUi();
}
});
}
}
但是根据Threads and Swing article ,从主线程构建 UI 是安全的:
A few methods are thread-safe: In the Swing API documentation, thread-safe methods are marked with this text:
This method is thread safe, although most Swing methods are not.
An application's GUI can often be constructed and shown in the main thread: The following typical code is safe, as long as no components (Swing or otherwise) have been realized:
public class MyApplication {
public static void main(String[] args) {
JFrame f = new JFrame("Labels");
// Add components to
// the frame here...
f.pack();
f.show();
// Don't do any more GUI work here...
}
}
那么,是否有真正的(线程安全)理由通过SwingUtilities#invokeLater
在main中构建UI ,或者这只是一种习惯,记得在其他情况下这样做吗?
最佳答案
“Swing 单线程规则:Swing 组件和模型应该仅从事件调度线程创建、修改和查询。”— Java Concurrency in Practice , 还讨论了 here和 here .如果您不遵守此规则,那么您将无法可靠地构建、修改或查询可能假设您确实遵守此规则的任何组件或模型。一个程序可能看起来工作正常,但在不同的环境中却神秘地失败了。由于违规行为可能不明显,请使用提到的方法之一验证正确使用 here .
关于java - Java 中的主线程与 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7156949/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!