JavaFX :在文本区域中设置文本后,在单独的线程中设置滚动到底部不起作用



我创建了一个JavaFX应用程序,我正在使用一个后台进程更新日志。所以我在文本区域中设置日志文本并使用logs.setScrollTop(Double.MAX_VALUE)设置滚动到底部。但是滚动条设置为从底部向上一点。我还尝试了ScrollPan中的TextFlow,并使用logDisplay.setVvalue(1.0)将滚动设置到底部。它也给出了相同的结果。

Platform.runLater(() -> {
    logs.setText([setting log text]);//TextArea logs
    logs.setScrollTop(Double.MAX_VALUE));
});
//For TextFlow inside ScrollPane
Platform.runLater(() -> {
    logs.setText([setting log text]);//Text logs
    logDisplay.setVvalue(1.0);
});

我还尝试在单独的线程中运行代码,例如

new Thread() {
    public void run(){
        System.out.println("called set test");
        logs.setText([setting log text]);//Text logs
        logDisplay.setVvalue(1.0);
    }
}.start();

但没有任何效果:(
你能帮我这有什么问题吗?
谢谢

--编辑--
看起来问题是由于线程问题。滚动条值正在更新为以前的文本值。实际上,在检索滚动值时,它不是检索最新值,而是获取较旧的值,因此滚动条设置为上一条消息的末尾,而不是实际的最后一行。

我不知道这个问题的实际问题,但我找到了另一种解决方案。

我正在使用文本长度在文本末尾设置插入符号的位置。

logs.setText(logText);
logs.positionCaret(logText.length());

它正在为我工作。 :)

最新更新