如何为我的国际象棋游戏添加倒计时?

问题描述 投票:0回答:1

我一直在用JavaFX开发国际象棋游戏,我认为这很好,但是现在我正试图为两位玩家增加倒计时。我试图阅读文档/观看youtube视频/搜索stackoverflow,最后终于做到了,我可以每秒在控制台上打印计时器。问题是我在另一个类中有代码,并且想要而不是在控制台上打印,而是要显示在GUI应用程序中(使用Text变量),所以我不知道如何将倒数发送到我的主类。 (我使用过run()方法,所以我认为那是不可能的),然后将其添加到我的窗格,场景等中。或者,也许不知道有一种方法可以将其直接添加到场景或窗格中。这是我的倒计时代码:

package com.mycompany.chess;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.scene.text.Text;
import org.w3c.dom.css.Counter;


public class MyThread extends Thread {
    static int min = 10;
    static int sec = 0;
    Text counter = new Text();


    public void run(){
       while(min>-1){
           if(sec == 0){
                min--;
                sec = 59;
            }
            if(sec<10){
                String seconds = String.valueOf(sec);
                String minutes = String.valueOf(min);
                counter.setText(minutes + ":0" + seconds);
                System.out.println(minutes + ":0" + seconds);
                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
                }
                sec--;
            }else{
                String seconds = String.valueOf(sec);
                String minutes = String.valueOf(min);
                counter.setText(minutes + ":" + seconds);
                System.out.println(minutes + ":" + seconds);

                try {
                    Thread.sleep(1000L);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Counter.class.getName()).log(Level.SEVERE, null, ex);
                }
                sec--;
            }
        }
    }

    }

如果代码混乱或类似的东西,请不要判断我,我是一个完整的初学者。

谢谢大家

java class javafx timer countdown
1个回答
0
投票

不扩展线程是不建议使用的做法,请对Lambda使用Runnable代替。

您可以轻松地将引用传递给您的一个GUI元素并从正在运行的线程中对其进行更新,就可以实现您想要做的。

类似这样的东西:

public class MyMainClass {
    void someMethod() {
       new Thread(() -> {
          // Do timer stuff
          myCoolTimerLabel.setText(timer);
       }).start();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.