gpt4 book ai didi

java - CountdownTimer 未在 Runnable 中运行

转载 作者:行者123 更新时间:2023-12-02 11:10:10 27 4
gpt4 key购买 nike

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

问题是我正在尝试开发类似游戏的东西,并尝试添加计算机或人工智能玩家来对抗人类玩家。

为此,我在 OnCreate 方法中添加了一个 CountdownTimer ,并且它仅工作正常一次,因为 OnCreate 仅执行一次。但是,当我尝试在可运行对象内添加 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 接口(interface)的原因。但仍然没有运气。不幸的是我无法识别错误。如果有人可以提供帮助,那么对于像我这样愚蠢的开发人员来说,那就太好了。

最佳答案

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

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

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

这意味着您正在创建新对象,直到耗尽所有设备内存或直到player2_name不是“Computer”

您应该使用 boolean 标志。

我认为您需要的是通过重新启动 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();
<小时/>

关于您的以下声明:

If Someone can help then it would be very kind for a foolish developer like me.

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

关于java - CountdownTimer 未在 Runnable 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com