java - 无法使用 CountDownTimer 类创建处理程序

标签 java android countdowntimer

我正在做一个学校项目,我们正在制作一个炸弹人游戏。游戏场上有 2 个炸弹人,用户和 AI。

当用户放置炸弹并离开时,炸弹会在时间结束时闪烁并爆炸。

但是这不适用于 AI。

当 AI 放置炸弹并离开它时,当它应该闪烁然后爆炸时,应用程序崩溃并留下以下错误:

FATAL EXCEPTION: Timer-0
 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

CountDownTimer 代码如下。

public void explodeAIBomb(){


    //Starts countdown 2-4 seconds

    new CountDownTimer(new Random().nextInt(2000) + 2000, 300) {
        //test for onTick; bomb flashes
        boolean test = false;

    public void onFinish() {
        //on explosion{
        gameBoard[locateAIX][locateAIY] = new Blast();          
        explosionSide(locateAIX, locateAIY);
        explosionVert(locateAIX, locateAIY);
        updateView();


        //Clear all blasts after 1 second
        new CountDownTimer(1000, 1000){
            public void onFinish(){
                for (int x = 0; x < XasLength + 1; x++) {
                    for (int y = 0; y < YasLength + 1; y++) {
                        if(gameBoard[x][y] != null){
                            if(gameBoard[x][y].getTileId() == BLAST || gameBoard[x][y].getTileId() == BLAST_SIDE || gameBoard[x][y].getTileId() == BLAST_VERT){
                                gameBoard[x][y] = null;
                            }
                        }
                    }
                }
                aiBombPlanted = false;
                updateView();
            }
            @Override
            public void onTick(long millisUntilFinished) {
            }                   
        }.start();
        updateView();
    }

    //Flashes the bomb every 0.3 second
    public void onTick(long millisUntilFinished) {              
        if(test){
            loadTile(BOMB, r.getDrawable(R.drawable.bomb));
            test = false;
        }
        else{
            loadTile(BOMB, r.getDrawable(R.drawable.bomb2));
            test = true;
        }
        updateView();
    }
}.start();

最佳答案

您在某处通过工作线程执行 UI 工作。您需要从主线程中调用处理 UI 的内容。

我认为之前已经回答过同样的问题。

stackoverflow.com/questions/6354740/how-is-countdowntimer-accessing-ui-inside-ontick-method

关于java - 无法使用 CountDownTimer 类创建处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718989/

相关文章:

java - 如何在 Nodejs 中使用像 RMI 这样的 Java Spring Service?有人知道吗?

android - 工具栏上的波纹效果被切断

android - 异步任务进度对话框显示太晚

c - 我在 Windows 上用 C 语言做了高分辨率计时?这样对吗?

java - 调整 appletviewer 窗口大小时, Canvas 大小不会改变

java - FieldError 对象中的参数代码是什么?

java - Android UI 以编程方式在 GridLayout 位置

java - 当用户按下后退按钮时停止线程

javascript - ForEach 循环内的倒数计时器 PHP

java - 将值配置到用 Java 编写的 AWS Lambda 中