gpt4 book ai didi

java - 循环方法而不卡住GUI?

转载 作者:行者123 更新时间:2023-12-02 02:29:46 25 4
gpt4 key购买 nike

我目前正在开发一个小程序,该程序从网站收集匹配列表,并将其输入到 GUI 的 jList 中。

我想循环一个刷新列表元素的方法,以便匹配项在完成后不会显示在列表中。为此,我需要让循环始终运行,但这会导致 GUI 卡住。

我试图找到解决方法,并阅读了一些关于计时器的内容,该计时器对我来说不太适用并创建了一个新线程,但这对我的列表不起作用,因为它在第一个循环后超出了范围。

我检查过它与我调用的方法无关,因此需要循环的方法不是问题。

有谁知道如何在不卡住整个 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();

最佳答案

首先看一下Concurrency in Swing ,特别是 Worker Threads 中的部分。

基于有限的代码,我还建议您查看How to use Swing Timers

请记住,Swing 不是线程安全的,而是单线程的。这意味着(正如您所发现的)您不应在事件分派(dispatch)线程的上下文中执行长时间运行或阻塞操作,也不应从事件分派(dispatch)线程的上下文外部更新 UI。

两种解决方案(SwingWorker 和 Swing Timer)都提供了允许您在更新 UI 之前等待一段时间的方法,您使用哪种方法最终取决于您的总体问题

关于java - 循环方法而不卡住GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47316812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com