我有课:

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。

09-16 06:25