我有一个 TextArea,我希望能够在一段时间内附加字符或单词。我尝试使用 Thread.sleep() 但很快意识到这是非常错误的。
我猜是伪伪代码
textArea.appendText("hey");
mysteryWaitMethod(500);
textArea.appendText("delayed");
JavaFX 确实有一个内置的计时器——它被称为Timeline。它简单、直接,并提供了类似于 SwingTimer
类的额外功能,最重要的是,它在 UI 线程上执行代码。
我对 JavaFX 的了解不多,但通常你想要修改 UI 线程上执行的 UI 的东西。这就是这个类的作用......我建议使用它java.util.Timer
(将它用于后台任务......而不是 UI 任务)。当多个线程试图弄乱一个 UI 时,往往会发生不好的事情(这就是这些计时器的原因)。
这篇文章提供了一个很好的例子来说明如何使用它:https ://stackoverflow.com/a/9966213/1515592
使用 javax.swing.Timer
textArea.appendText("hey");
int delay = 500; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
textArea.appendText("delayed");
}
};
Timer t = new Timer(delay, taskPerformer);
t.setRepeats(false);
t.start();
http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html
或 java.util.Timer
new Timer().schedule(
new TimerTask() {
@Override
public void run() {
textArea.appendText("delayed");
}
}, 500);
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html