2010-07-05 113 views
6

我在Java(1.5)+ Swing中做了一些例程,这需要一些时间。如何在摆动线程外部实现此路由的最佳方式,以避免UI冻结?Java Swing - UI冻结

在此先感谢

+1

这可以帮助:http://stackoverflow.com/questions/2564388/javas-swing-线程 – 2010-07-05 22:01:13

+0

其实这个链接也比我的回答好得多... – 2010-07-05 22:04:24

+0

是的,我已经发布了一个答案,这个链接,但它现在只是无用:) – 2010-07-05 22:06:46

回答

7

乍一看,看SwingWorker类。当你想让代码更加健壮和可测试时,你可能想要摆脱这种情况,但这是一个足够好的开始。

您可以获得Java 1.5的一个版本here。 1.6版本是标准API的一部分。

+0

我从来没有使用JDK实现,但它似乎被窃听,请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6880336 – 2010-07-05 22:27:11

+1

@Sylvain该错误被标记为适用于1.7,不是1.6。 – Ash 2010-07-05 22:46:36

+1

@Ash,这适用于1.6u18,而不仅仅是1.7 – Yishai 2010-07-06 01:42:39

3

使用SwingWorker当然是好主意,我建议。还编写自定义javax.swing.Timer s和java.lang.Thread s。

但是别忘了使用profiler - 它可以帮助您找到许多问题。像Swing经常遇到“死”听众有一些引用不能被垃圾收集(导致响应非常缓慢或UI冻结,甚至内存泄漏)。 Profiler将帮助您在使用应用程序时调查特定情况下的内存需求,因此您可以对应用程序进行微调。