[英]Loop method without freezing the GUI?
我目前正在开发一个小型程序,该程序从网站收集匹配列表,然后将其输入到GUI的jList中。
我想循环一个刷新列表元素的方法,以使匹配一旦完成就不会出现在列表中。 为此,我需要一直运行循环,但这会导致GUI冻结。
我试图找到一种解决方法,并阅读了有关Timer的一些知识,该定时器对我而言并不奏效,并创建了一个新的Thread,但这不适用于我的列表,因为它在第一次循环后就越界了。
我检查了它与我调用的方法没有任何关系,因此,需要循环的方法不是问题。
有谁知道如何在不冻结整个GUI的情况下循环方法。 像这样
while (true) {
dlm.removeAllElements(); //To remove all elements from the List
getMatches(); //Adds the matches to dlm whic
sleep(6000); //wait 6 seconds to refresh
}
这是我用来测试不会崩溃的循环的代码。
new Thread(new Runnable() {
public void run() {
while (true) {
dlm.removeAllElements(); //To remove all elements from the List
getMatches(); //Adds the matches to dlm whic
sleep(6000); //wait 6 seconds to refresh
}
};
}).start();
首先看一下Swing中的并发 ,特别是Worker Threads中的部分。
根据有限的代码,我还建议您看看如何使用Swing计时器
请记住,Swing不是线程安全的,而是单线程的。 这意味着(如您所发现的)您不应在事件调度线程的上下文中执行长时间运行或阻塞的操作,并且不应从事件调度线程的上下文外部更新UI。
两种解决方案( SwingWorker
和Swing Timer
)都提供了一些方法,使您可以等待一段时间才能更新UI,最终使用哪种方法最终取决于您的总体问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.