回复:在 Event-Dispatch 线程上创建 Swing 对象的要求。
我正在开发一个应用程序,其目的是监视和显示各种远程嵌入式服务器的状况。我对 Java 很陌生,我对 Swing 对象和 EDT 的要求的理解是不完整的。
主 GUI 在 EDT 上以通常的方式启动,如下所示,
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
用户然后可以选择对应于远程机器中的一个或另一个的一个或多个菜单选项。这样的效果就是每次新建一个线程如下
new Thread(new VoterStatus(itemNumber)).start();
它调用 VoterStatus 的类“run”方法,该方法又创建一个带有 JFrame 的新窗口。新线程是 VoterStatus 类的一个实例,然后询问(TCP 等)指定的特定远程(itemNumber),收集各种信息位并在 JFrame 中显示它们。
可能有任意数量的此类线程对应于 VoterStatus 的一个实例,它们都更新它们自己的窗口。这些不同的窗口/JFrame/任务之间没有数据共享。
这似乎工作得很好,但是安全吗?
我是否违反了在 EDT 上创建 Swing 组件的规则?
使用 SwingWorker 类是否有益?
我将不胜感激在此类问题上更有经验的 Java 程序员的任何评论。
谢谢史蒂夫