使用infinte循环时javaFX崩溃

时间:2017-09-27 17:48:49

标签: java loops javafx crash

我正在尝试在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()));
        }

    }

2 个答案:

答案 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()));
});