我有课:
public class Friends implements Runnable{
private ObservableList<String> friendsList;
public Friends() {
this.friendsList = FXCollections.observableArrayList();
}
public ObservableList<String> getList(){
return friendsList;
}
public void start(){
//run thread here
}
@Override
public void run() {
//update friendList here
}
}
在控制器中,我这样写:
Friends vf = new Friends();
ListView_1.setItems(vf.getList());
vf.start();
在ListView每秒更新一次之后,但是我有这样的异常:
线程“ Thread-5”中的异常java.lang.IllegalStateException:在FX应用程序线程上不; currentThread =线程5。
.....
阅读手册后,我了解到我们需要刷新FX线程中的UI。我使用了Platform.runLater(),但是在流的结尾,UI变慢了。
对不起,我的英语不好。
最佳答案
您的Friends.run最有可能在单独的线程上运行并在那里更新friendsList。但这是不允许的。您必须使用Platform.runLater(() -> { friendsList.setAll(newValue); })
更新FX应用程序线程上的friendList。
您可以在后台线程中构建newValue,但必须在FX应用程序线程上设置friendsList。