在updateProgress期间将文本追加到JavaFX TextArea

乙基卡辛

我下面有这个简单的代码,它更新了TextArea期间updateProgress

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到Value:100

我只是想测试JavaFX中的并发包。有人可以告诉我怎么回事吗?

DVarga

如果您插入一个简单的:

Thread.sleep(10);

致电后updateProgress(i, 100);,一切都会好起来。这来自以下文档updateProgress

对updateProgress的调用被合并并稍后在FX应用程序线程上运行,并且即使从FX Application线程对updateProgress的调用也不一定会导致这些属性的立即更新,并且中间的workDone值可能会被合并以保存事件通知。max成为totalWork的新值。

此后,您可能会遇到更多的文本行追加到您的文本框,但是:

这不能确保所有更新都将在您的文本框中完成!

如果要确保这一点,请直接在块中call()包装的任务中调用GUI更新Platform.runlater(...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文本追加到TextArea

来自分类Dev

将每个div的内容追加到textarea

来自分类Dev

使用jQuery将值追加到textarea

来自分类Dev

将每个div的内容追加到textarea

来自分类Dev

JavaFX TextArea中的文本模糊

来自分类Dev

JAVAFX使动态textArea大小

来自分类Dev

JavaFX TextArea右对齐

来自分类Dev

使javafx textArea的背景清晰

来自分类Dev

JavaFX TextArea立即更新

来自分类Dev

Textarea javaFx颜色

来自分类Dev

javafx TextArea抛出NullPointerException

来自分类Dev

JavaFX如何将文本写入textArea中的新行?

来自分类Dev

Textarea占位符文本

来自分类Dev

从textarea逐行获取文本?

来自分类Dev

左对齐textarea的文本

来自分类Dev

在“ textarea”附近对齐文本

来自分类Dev

单击将文本从div添加到textarea

来自分类Dev

textarea将jQuery追加到iframe不起作用

来自分类Dev

如何将</ textarea>文本放入textarea代码框中

来自分类Dev

如何将</ textarea>文本放入textarea代码框中

来自分类Dev

JavaFX TextArea中的文本自动滚动

来自分类Dev

在JavaFX的GridPane中从TextArea获取文本

来自分类Dev

复制期间Textarea格式丢失

来自分类Dev

将光标导航到textarea(JavaFX)

来自分类Dev

将psuedo元素添加到<textarea>

来自分类Dev

将CodeMirror添加到Skulpt Textarea

来自分类Dev

如何显示行数textarea javafx

来自分类Dev

自动调整JavaFX TextArea的宽度

来自分类Dev

在JavaFX中对齐TextArea的内容