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 时,它只会抛出 IllegalStateException
s。你需要
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
),具体取决于您需要的功能。
我有一个 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 时,它只会抛出 IllegalStateException
s。你需要
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
),具体取决于您需要的功能。