我正在尝试在javafx中构建一个时钟但是当我尝试使用无限循环时GUI崩溃
while (true) {
Date time = new Date();
// mins and hour are labels
if (time.getMinutes() < 10) {
mins.setText("0" + Integer.toString(time.getMinutes()));
} else {
mins.setText(Integer.toString(time.getMinutes()));
}
if (time.getHours() < 10) {
hour.setText(0 + Integer.toString(time.getHours()));
} else {
hour.setText(Integer.toString(time.getHours()));
}
}
答案 0 :(得分:1)
看起来你在UI线程中使用了无限循环。您应该在后台线程中跟踪时间,但是在UI线程中更新UI。
要在后台线程中运行,请使用:
new Thread(new Runnable(){
public void run(){
//your code here.
}
}).start();
要在UI线程中运行,请使用:
Platform.runLater(new Runnable(){
public void run(){
//your code here.
}
});
答案 1 :(得分:0)
这是完全合理的。永远不要阻塞主线程!使用额外的线程来实现您的目标。
Task<Void> workingTask = new Task<Void>() {
@Override
public Void call() {
while (true) {
//yourcode
}
}
并使用Platform.runLater(() - &gt; {// yourcode});为了将小任务发送到主javafx线程。例如,
Platform.runLater(() -> {
mins.setText(Integer.toString(time.getMinutes()));
});