首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用CountDownTimer类创建处理程序

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

Stack Overflow用户
提问于 2013-03-30 21:19:32
回答 1查看 1.1K关注 0票数 1

我正在做一个学校项目,我们正在制作一个bomberman游戏。操场上有两个炸弹人,用户和人工智能。

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

然而,这并不适用于人工智能。

当人工智能放置炸弹并离开它时,当它应该闪现然后爆炸时,应用程序崩溃,留下了这个错误:

代码语言:javascript
运行
复制
FATAL EXCEPTION: Timer-0
 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

CountDownTimer代码如下所示。

代码语言:javascript
运行
复制
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();

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-30 21:25:00

在某个地方,您正在从工作线程执行UI工作。您需要从主线程中调用处理UI的内容。

我想同样的问题以前已经回答过了。

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

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

https://stackoverflow.com/questions/15718989

复制
相关文章

相似问题

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