Java Swing - UI 冻结

6

我正在使用Java (1.5)+Swing进行一些例行操作,这需要一些时间。如何最好地在Swing线程之外实现此路由,以避免UI冻结?

提前致谢。


1
这可能会有所帮助:https://dev59.com/oHE85IYBdhLWcg3w43sW - Andreas Dolk
实际上,那个链接比我的回答更好... - Vincent Ramdhanie
是的,我已经发布了一个带有链接的答案,但现在它没有用处了 :) - sly7_7
谢谢。我根据这个答案完成了自己的实现,并添加了一个进度条来报告状态。 :) - Victor
3个回答

7

乍一看,看看 SwingWorker 类。当您想使代码更加健壮和可测试时,您可能希望远离它,但这是一个足够好的第一步。

您可以在此处获取适用于 Java 1.5 的版本(链接)。在 1.6 中,它是标准 API 的一部分。


我从未使用过JDK实现,但它似乎有漏洞,请参见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6880336。 - sly7_7
1
@Ash,这适用于1.6u18,而不仅仅是1.7。 - Yishai

3
使用SwingWorker当然是个好主意,我也推荐这样做。同时编写自定义的javax.swing.Timerjava.lang.Thread也是不错的选择。
但是不要忘记使用分析器 - 它可以帮助您找到许多问题。例如,Swing通常会遇到与“死”监听器相关的问题,这些监听器保留了一些无法进行垃圾回收的引用(导致非常缓慢的响应或UI冻结甚至内存泄漏)。分析器将帮助您调查在使用应用程序时特定情况下的内存需求,因此您可能能够对应用程序进行微调。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接