【问题标题】:Java FX Textarea performance issue in .jar.jar 中的 Java FX Textarea 性能问题
【发布时间】:2015-03-07 16:07:15
【问题描述】:

我有一个 TextArea,我希望能够在一段时间内附加字符或单词。我使用 java.util 中的 Timer,当我在 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);

    }
}

【问题讨论】:

  • 电脑重启后能重现吗?

标签: performance jar javafx textarea


【解决方案1】:

您的代码存在线程问题:在 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),具体取决于您需要的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多