.jar中的Java FX Textarea性能问题

时间:2015-03-07 16:07:16

标签: performance jar javafx textarea

我有一个TextArea,我希望能够在一段时间内附加字符或单词。我在java.util中使用Timer,当我在Eclipse中运行应用程序时,everthing工作正常,但是当我将应用程序导出到.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);

    }
}

1 个答案:

答案 0 :(得分:2)

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

        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),具体取决于您需要的功能。