gpt4 book ai didi

JavaFX : avoid thread-code in Model Setters

转载 作者:行者123 更新时间:2023-12-01 15:01:42 25 4
gpt4 key购买 nike

我是第一次尝试 javafx。在我的模型中,我有一个属性可以告诉我的应用程序是否已连接。其他地方有一个连接监听器,当值发生变化时,它会调用connection.setConnectionState(state)

问题是我遇到了异常:

Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4

这是有道理的,因为我试图在一个不是 UI 线程的线程中更改 UI。所以我将 Platform.runLater(..) 添加到我的 setter 中并且它有效。

问题:如果我必须对每个属性都执行此操作,我的 setter 会变得非常难看。 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());
}
});
}

}

Controller :

public class ConnectionController implements Initializable {

@FXML
Label connectionLabel;

@Override
public void initialize(URL location, ResourceBundle resources) {

Bindings.bindBidirectional(connectionLabel.textProperty(),
connection.getConnectionStateProperty());
}
}

最佳答案

fx-guice项目中有一个名为 @FxApplicationThread 的方法注释,只要通过 guice 注入(inject)对象,它就会在 FX 线程上运行该方法,我发现这非常易于使用和清理。

关于JavaFX : avoid thread-code in Model Setters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13549154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com