我读过所有的Java swing都不是线程安全的。
我正在异步地从远程站点加载数据,并在加载后在对话框中显示它们。我担心的是,如果swing并非如它所声称的那样是线程安全的,恐怕在设置对话框的所有者框架(该框架位于另一个线程中)时会引起问题。
如果我对自己的观点是正确的,该如何同步打开对话框并避免出现任何问题?
最佳答案
必须在事件调度线程(EDT)上创建和更新Swing组件。
使用单独的线程加载数据时,可以使用SwingUtilities.invokeLater(...)
创建对话框及其组件。
另一个选择是使用SwingWorker
。工作人员的后台处理完成后,您的代码可以自动在EDT上执行。
阅读有关Concurrency的Swing教程中的部分,以获得更多信息和工作示例。