0

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

1 に答える 1

1

fx-guiceプロジェクトには、 @ FxApplicationThreadというメソッドアノテーションがあります。これは、オブジェクトがguiceを介して注入されている限り、FXスレッドでメソッドを実行します。これは非常に使いやすくクリーンです。

于 2012-11-25T14:11:01.860 に答える