首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CountdownTimer无法在可运行的环境中运行

CountdownTimer无法在可运行的环境中运行
EN

Stack Overflow用户
提问于 2018-06-03 05:39:49
回答 2查看 52关注 0票数 0

你好,开发人员,这个问题对一些读者来说可能是愚蠢的,它以前可能已经回答过了,但是我在这个论坛上看到了很多关于我的问题的答案,但是我无法理解其中的一个。所以,如果可以的话,请友好地回答我的问题。

问题是,我正在尝试开发类似于游戏的东西,并试图将计算机或人工智能玩家添加到人类玩家身上。

为此,我在OnCreate方法中添加了一个OnCreate,它只工作了一次,因为OnCreate只执行了一次。但是,当我试图在一个runnable和那个while循环中添加一个while循环时,我添加了相同的CountdownTimer,但是它开始给我带来错误。

代码语言:javascript
运行
复制
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接口的原因。但还是没有运气。不幸的是,我无法识别这些错误。如果有人能帮忙的话,对我这样一个愚蠢的开发人员来说,这将是非常好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-03 06:06:03

首先,您不需要使用Runnable来使CountDownTimer工作。这是因为如果运行在CountDownTimer中的代码可以直接与UI交互。

第二,您不应该在代码中使用while循环。特别是对于以下代码:

代码语言:javascript
运行
复制
while (player2_name.equals("Computer")) {
   CountDownTimer computer_player;
   ...
   computer_player = new CountDownTimer(5000, 1000) {}
   ...
}

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

你应该用布尔标志代替。

我认为您需要的是通过这样的方法重新启动CountDownTimer

代码语言:javascript
运行
复制
// 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
EN

Stack Overflow用户

发布于 2018-06-03 06:04:15

不确定你的目标,但你的时间循环似乎很麻烦。在测试一个字符串而不改变它的值的时候,它会一遍又一遍地运行(然后创建许多我不认为是您意图的CountdownTimer )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50663603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档