只有创建视图层次结构的原始线程才能触及其视图。没有可运行的

时间:2014-03-21 14:04:12

标签: java android multithreading timer

我已经完成了我的第一个Android游戏的退出并且它运行良好。现在我需要让屏幕每秒刷新一次,这样我的游戏计数器就会刷新。

执行计时器会出现此问题:

只有创建视图层次结构的原始线程才能触及其视图。

我已经搜索了stackoverflow,解决方法是创建一个runnable。我不知道它是如何工作的。我创建一个,然后程序中断,因为上下文不能在runnable

中工作
error: constructor DrawGame in class DrawGame cannot be applied to given types;
required: Context
found: no arguments
reason: actual and formal argument lists differ in length

我该怎么办?为什么我需要一个可运行的。我的游戏是一种简单的国际象棋类游戏。

试图这样做:

public class DrawGame extends View implements OnTouchListener {


Timer turnTimer = new Timer("timeLeft", false);
TimerTask countDown = new TimerTask() {
    @Override
    public void run() {

       invalidate();

    }
};




public DrawGame(Context context){
    super(context);

    Turns.turnTimeCounter();
    Turns.yourTurn();
    turnTimer.scheduleAtFixedRate(countDown, 1000, 1000 );

}

@Override
public void onDraw(Canvas canvas){
//lot of code
}

1 个答案:

答案 0 :(得分:1)

当您在主线程中时,您只能编辑View的状态。当你在计时器中时,你来自一个单独的线程。使用此命令将操作发布到主线程。

counter.post(new Runnable() {

    public void run() {
        counter.setText(newTime);
    }    

});