初めて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());
}
}