CountdownTimer未在Runnable中运行

时间:2018-06-03 05:39:49

标签: java android runnable countdowntimer java-threads

您好开发人员这个问题对某些读者来说可能看起来很愚蠢,之前可能已经回答过,但我在这个论坛上看到了很多关于我的问题的答案,但我无法理解其中的一个。如果可以,请善待并回答我的问题。

事情是,我正在尝试开发类似游戏的东西,并试图添加计算机或AI玩家对抗人类玩家。

为此,我在CountdownTimer方法中添加了一个OnCreate,它只运行一次,因为OnCreate只执行一次。但是当我尝试在runnable中添加while循环并在while循环中添加相同的CountdownTimer但它开始给我错误。

if(player2_name.equals("Computer")) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                while (player2_name.equals("Computer")) {
                  CountDownTimer computer_player;
                   ct = 5;
                   firstplayer_game_button.setClickable(false);
                   computer_player = new CountDownTimer(5000, 1000) {
                       @Override
                       public void onTick(long millisUntilFinished) {
                           ct = ct - 1;
                    //       timer_counter.setText("" + ct);
                           if (ct == 1) {
                               firstplayer_game_button.setClickable(true);
                           }
                       }

                       @Override
                       public void onFinish() {
                        //   secondplayer_game_button.setBackgroundResource(R.drawable.button_player_2);
                        //   firstplayer_game_button.setBackgroundResource(R.drawable.button_player_1);
                        //   firstplayer_game_button.setClickable(true);
                           if (player2_name.equals("Computer")) {

                               secondplayer_game_button.setClickable(false);

                           } else {
                               secondplayer_game_button.setClickable(true);
                           }
                           if (checker != 1) {
                               Click_Condition_checker(2);
                           }
                       }
                   };
                   computer_player.start();
                }
            }
        };
        Thread mythread = new Thread(r);
        mythread.start();

我知道Runnable无法直接与UI交互,为此我们需要处理程序,这就是我评论所有UI界面的原因。但仍然没有运气。不幸的是,我无法识别错误。如果有人可以提供帮助那么对于像我这样愚蠢的开发者来说这将是非常友好的。

2 个答案:

答案 0 :(得分:1)

首先,您无需使用Runnable来制作CountDownTimer作品。这是因为如果代码在CountDownTimer内运行,Activity可以直接与UI交互。

其次,不应在代码中使用while循环。特别是对于以下代码:

while (player2_name.equals("Computer")) {
   CountDownTimer computer_player;
   ...
   computer_player = new CountDownTimer(5000, 1000) {}
   ...
}

这意味着您要在耗尽所有设备内存或者直到player2_name不是"Computer"之前创建新对象。

您应该使用布尔标志。

我认为您需要的是通过使用以下内容重新启动CountDownTimer来实现:

// use a more readable variable name instead of computer_player
final CountDownTimer cdtPlayer = new CountDownTimer(5000, 1000) {
   @Override
   public void onTick(long millisUntilFinished) {
     // do something
   }

   @Override
   public void onFinish() {
     // do something

     // restart to do all again
     cdtPlayer.start();
   }
};

cdtPlayer.start();

关于您的以下声明:

  

如果有人可以提供帮助,那对像我这样愚蠢的开发者来说会非常友好。

在开始学习某些东西时,每个人都是愚蠢的。不要对自己太难;)

答案 1 :(得分:0)

不确定你的目标,但你的while循环似乎很麻烦。一段时间测试字符串并且不改变它的值,它会反复运行(然后创建许多CountdownTimer,我认为这不是你的意图)