我多次认为为什么Java
强制我们在使用Swing
时强制使用EDT?
从任何Swing
更新Thread
组件或换句话说multithreaded
可能会更容易。
确实,SwingUtilities.invokeAndWait
和SwingUtilities.invokeLater
可以帮助我们
排队Swing
事件,但是,如果GUI
,它们将不会出现在图片中
组件可以从任何其他Thread
更新。
并且,Java制造商是否真的忘记了Swing
线程安全?
如果swing是多线程的,可能会出现什么问题? 我的Java程序已经“冻结”了十几次这个时间:/
答案 0 :(得分:7)
如果swing是多线程的,可能会出现什么问题?让Java制造商真的忘记让Swing Thread-Safe?
已经进行了许多尝试来创建多线程GUI但most have failed因为它们不起作用或者使用起来过于复杂。单线程模型是标准和最简单的解决方案。
我的Java程序已经“冻结”了十几次这个
的时间
那是因为你没有按照你应该的方式使用Swing。它是单线程的事实并不妨碍你在另一个线程上运行长任务(你应该这样做以防止冻结)。您可以在Concurrency in Swing Tutorial中详细了解相关信息。特别是:
小心使用并发对Swing程序员来说尤为重要。一个写得很好的Swing程序使用并发来创建一个永远不会“冻结”的用户界面 - 无论它在做什么,程序总是响应用户交互。要创建响应式程序,程序员必须了解Swing框架如何使用线程。