Java .jar 中的 FX Textarea 性能问题

Java FX Textarea performance issue in .jar

我有一个 TextArea,我希望能够在一段时间内向其添加字符或单词。我使用来自 java.util 的计时器,当我在 Eclipse 中使用 运行 应用程序时,一切正常,但是当我将应用程序导出到 .jar 时,我遇到了性能问题。

这是来自 Eclipse 的视频: http://pl.tinypic.com/r/4ftw1f/8

这是.jar: http://pl.tinypic.com/r/6zmoon/8

和代码:

@FXML
private TextArea textarea;


public void start(KeyEvent keyEvent)
{
    if (keyEvent.getCode() == KeyCode.ENTER)
    {
        new Timer().schedule(
                new TimerTask() {
                    int i;
                    @Override
                    public void run() {
                        textarea.appendText("hey" + i + "\n");
                        i++;
                    }
                }, 0, 500);

    }
}

您的代码存在线程问题:在 Java 8 中,当您尝试从后台线程更新 UI 时,它只会抛出 IllegalStateExceptions。你需要

        if (event.getCode() == KeyCode.ENTER)
        {
            new Timer().schedule(
                    new TimerTask() {
                        int i;
                        @Override
                        public void run() {
                            String message = "hey"+i+"\n";
                            Platform.runLater(() -> textArea.appendText(message));
                            i++;
                        }
                    }, 0, 500);

        }

我不知道这是否会解决您的性能问题。将文本附加到文本区域本质上涉及进行大量字符串连接;最终(随着文本区域中的文本变长)这将是令人望而却步的。您可能希望使用虚拟化控件(例如 ListView),具体取决于您需要的功能。