【发布时间】:2016-08-28 01:09:28
【问题描述】:
我在下面有这个简单的代码,它在updateProgress 期间更新TextArea:
textArea = new TextArea();
textArea.setEditable(false);
textArea.setFocusTraversable(false);
StackPane root = new StackPane();
root.setPadding(new Insets(10));
root.getChildren().add(textArea);
Scene scene = new Scene(root, 600, 350);
primaryStage.setTitle("JavaFX Concurrency");
primaryStage.setScene(scene);
primaryStage.show();
task = new Task<Integer>(){
@Override
protected Integer call() throws Exception {
int i;
for(i = 1; i <= 100; i++){
updateProgress(i, 100);
}
return i;
}
};
task.stateProperty().addListener(new ChangeListener<State>(){
@Override
public void changed(ObservableValue<? extends State> observable, State oldValue, State state) {
System.out.println(state);
}
});
task.progressProperty().addListener(new ChangeListener<Number>(){
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number val) {
Platform.runLater(new Runnable(){
@Override
public void run() {
textArea.appendText("Value : " + val.intValue() + "\n");
}
});
}
});
new Thread(task).start();
但不幸的是结果是错误的。这是输出:
我期望输出应该是 Value : 1 to Value : 100.。
我只是想在 JavaFX 中测试并发包。有人可以告诉我发生了什么事吗?
【问题讨论】:
-
您是否尝试将
textArea.setEditable(false);更改为textArea.setEditable(true);? -
@Mxsky,有什么意义?
-
来自文档:“设置或指示用户是否可以编辑文本字段中的文本。”
-
见this
标签: java multithreading javafx javafx-2 javafx-8