【发布时间】:2017-05-19 01:50:36
【问题描述】:
不幸的是,我已经成为不断更新标签问题的牺牲品。在寻找解决方案时,我找到了一个答案,其中有很多人建议将我的标签绑定到 StringProperty,然后每当更改 StringProperty 时,标签的文本就会随之更改。但是,我终其一生都无法让它发挥作用。
我知道这是某种线程问题。有没有办法使用 DataBinding 解决方案等解决问题,或者线程是唯一的选择?如果线程是唯一的选择,你能指出我正确的方向吗?我也没有找到使用线程的好解决方案...
任何帮助将不胜感激!
程序说明:下面程序的预期功能是让标签在for循环中从0-10计数时不断更新。
public class First extends Application {
Stage mainStage;
Scene mainScene;
Button mainButton;
Label mainLabel;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
mainStage = stage;
mainButton = new Button("Begin!");
mainLabel = new Label("Ready");
VBox box = new VBox(50);
box.getChildren().addAll(mainLabel, mainButton);
mainScene = new Scene(box, 200, 200);
mainStage.setScene(mainScene);
mainStage.setTitle("Test Program");
mainStage.show();
//Handles Button Press
mainButton.setOnAction(e -> {
Second s = new Second();
mainLabel.textProperty().bind(s.getProperty());
s.count();
});
}
}
这是第二课:
public class Second {
private StringProperty strP = new SimpleStringProperty(this, "strProperty", "");
//Get Property
public StringProperty getProperty() {
return strP;
}
//Get String
public String getString() {
return strP.get();
}
//Changes StringProperty every 0.25s
public void count() {
for (int i = 0; i <= 10; i++) {
this.strP.set(Integer.toString(i));
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
标签: java multithreading javafx label