1

很多时候我想为什么Java强迫我们在工作时使用EDTSwingSwing从任何Thread或换句话说它可以是更新组件会不会容易得多multithreaded

确实,SwingUtilities.invokeAndWait并且SwingUtilities.invokeLater帮助我们排列Swing事件,但是,如果GUI 组件可以从任何其他Thread.

而且,Java 制造商真的忘记了Swing线程安全吗?

如果 swing 是多线程的,可能会出现什么问题?由于这个原因,我的 Java 程序已经“冻结”了十几个时间:/

4

1 回答 1

7

如果 swing 是多线程的,可能会出现什么问题?Java 开发者真的忘记了使 Swing 线程安全吗?

已经进行了许多尝试来创建多线程 GUI,但大多数都失败了,因为它们无法正常工作,或者它们过于复杂而无法正确使用。单线程模型是标准且最简单的解决方案。

由于这个原因,我的 Java 程序“冻结”了十几次

那是因为您没有按照应有的方式使用 Swing。它是单线程的这一事实并不能阻止您在另一个线程上运行长任务(您应该这样做以防止冻结)。您可以在 Swing 教程中的并发中了解更多信息。尤其:

谨慎使用并发对于 Swing 程序员来说尤为重要。一个编写良好的 Swing 程序使用并发来创建一个永远不会“冻结”的用户界面——该程序总是响应用户交互,无论它在做什么。要创建响应式程序,程序员必须了解 Swing 框架如何使用线程。

于 2013-01-05T12:47:01.397 回答