我第一次尝试javafx。在我的模型中,我有一个属性可以告诉我我的应用程序是否已连接。connection.setConnectionState(state)
当值更改时,其他地方有一个 connectionListener 调用。
问题是我有异常:
Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
这是有道理的,因为我试图在不是 UI 线程的线程中更改 UI。所以我添加Platform.runLater(..)
到我的二传手并且它有效。
问题:如果我必须为每个属性都这样做,我的二传手会变得非常难看。在 javafx 中是否有一些不错/正确的方法?
模型:
public class Connection {
private final StringProperty connectionStateProperty = new SimpleStringProperty();
public StringProperty getConnectionStateProperty() {
return connectionStateProperty;
}
public void setConnectionState(final ConnectionState connectionState) {
Platform.runLater(new Runnable() {
@Override
public void run() {
connectionStateProperty.setValue(connectionState.toString());
}
});
}
}
控制器:
public class ConnectionController implements Initializable {
@FXML
Label connectionLabel;
@Override
public void initialize(URL location, ResourceBundle resources) {
Bindings.bindBidirectional(connectionLabel.textProperty(),
connection.getConnectionStateProperty());
}
}