我有一个数组String[] announcement = new String[20];
,它具有20个值,我想每5秒检索一次。我找不到任何解决方法,每隔 5秒增加一次而不会阻塞我的UI。
答案 0 :(得分:1)
您需要的是Thread
。 Thread
与您的程序一起运行,因此您可以在程序仍然运行而不会冻结的情况下运行冗长的任务(例如下载文件)。每五秒钟设置一个字符串值的程序示例(我认为这是您所做的解释):
import java.util.concurrent.TimeUnit;
class Main {
public static void main(String[] args) {
// Thread runs alongside program without freezing
String[] retrievalArary = new String[20];
Thread thread = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < retrievalArary.length; i++) { // Run for the same count as you have items in your array
try {
TimeUnit.SECONDS.sleep(5); // Sleeps the thread for five seconds
} catch (InterruptedException e) {
e.printStackTrace();
}
retrievalArary[i] = Integer.toString(i); // Add the integer run count to the array
System.out.println(i); // Show progress
}
}
});
thread.start();
}
}
我无法确切地说出您要完成的工作,但是您可以很轻松地更改代码以符合您的要求。
答案 1 :(得分:1)
由于问题是用JavaFX标记的,因此我假设您要在检索到值后更新一些Node。如果使用常规线程实现,则必须使用Platform.runLater包装代码。但是,如果您使用javafx.animation.Timeline,则无需执行额外的工作。
String[] announcement = new String[20];
AtomicInteger index = new AtomicInteger();
Timeline timeline= new Timeline(new KeyFrame(Duration.seconds(5), e->{
String msg = announcement[index.getAndIncrement()];
// Use this value to do some stuff on Nodes.
});
timeline.setCycleCount(announcement.length);
timeline.play();