gpt4 book ai didi

java - 定期刷新 JavaFX TableView

转载 作者:行者123 更新时间:2023-12-01 22:07:10 24 4
gpt4 key购买 nike

我想在 JavaFX TableView 上有效地“轮询”,这样如果另一个用户在数据库中创建了作业,当前用户就会选择它(假设每 5 秒一次)。

我尝试过使用计时器;

new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
newI(connection, finalQuery, adminID);
} catch (SQLException e) {
e.printStackTrace();
}
}
}, 0, 5000);

但是,这会出现以下错误: 线程“Timer-0”中出现异常 java.lang.IllegalStateException:仅在事件线程上允许此操作; currentThread = Timer-0 我认为这意味着 JavaFX 不支持它?我如何能够定期更新 JavaFX 中的 TableView?

最佳答案

您可以使用 ScehduleService - 像这样......

private class MyTimerService extends ScheduledService<Collection<MyDTO>> {
@Override
protected Task<Collection<MyDTO>> createTask() {
return new Task<Collection<MyDTO>>() {
@Override
protected Collection<MyDTO> call() throws ClientProtocolException, IOException {
//Do your work here to build the collection (or what ever DTO).
return yourCollection;
}
};
}
}

//Instead of time in your code above, set up your schedule and repeat period.
service = new MyTimerService () ;
//How long the repeat is
service.setPeriod(Duration.seconds(5));
//How long the initial wait is
service.setDelay(Duration.seconds(5));

service.setOnSucceeded(event -> Platform.runLater(() -> {
//where items are the details in your table
items = service.getValue();
}));

//start the service
service.start();

关于java - 定期刷新 JavaFX TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32481466/

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