我有一个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);
}
}
答案 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
),具体取决于您需要的功能。