很多次我都在想,为什么Java强迫我们在使用EDT的同时使用Swing?从任何Thread更新Swing组件不是更容易吗?换句话说,它可以是multithreaded。
事实上,SwingUtilities.invokeAndWait和SwingUtilities.invokeLater帮助我们排列Swing事件,但是,如果GUI组件可以从任何其他Thread更新,它们就不会出现在画面中。
而且,Java开发者真的忘记了让Swing线程安全吗?
如果swing是多线程的,会出现什么问题?我的Java程序已经“冻结”了十几次,原因是:/
发布于 2013-01-05 20:47:01
如果swing是多线程的,会出现什么问题?Java开发者真的忘记了让Swing线程安全吗?
已经进行了许多尝试来创建多线程GUI,但most have failed要么是因为它们不工作,要么是因为它们过于复杂而无法正确使用。单线程模型是标准的也是最简单的解决方案。
我的Java程序因为这个而被“冻结”了十几次
这是因为您没有按照您应该使用的方式使用Swing。它是单线程的这一事实并不能阻止您在另一个线程上运行长任务(您应该这样做以防止冻结)。您可以在Concurrency in Swing Tutorial中阅读有关它的更多信息。特别是:
小心地使用并发性对Swing程序员特别重要。一个编写良好的Swing程序使用并发来创建一个永远不会“冻结”的用户界面--程序总是对用户交互做出响应,无论它在做什么。要创建响应式程序,程序员必须了解Swing框架是如何使用线程的。
https://stackoverflow.com/questions/14171892
复制相似问题