-4

我现在正在关注 thenewboston 的教程。我一直在 while 循环中遇到无法访问代码的错误,即不断检查持有者是否为真。

编辑这已经解决了。

    SurfaceHolder ourHolder;
    Thread ourThread = null;
    boolean isRunning = true;

    public MyBringBackSurface(Context context) {
        super(context);
        ourHolder = getHolder();
        ourThread = new Thread(this);
        ourThread.start();
    }

    public void pause(){
        isRunning = false;
        while(true){
            try {
                ourThread.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
        ourThread = null;
    }
    public void resume(){
        isRunning = true;
        ourThread = new Thread(this);
        ourThread.start();
    }


    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(isRunning){
            if(!ourHolder.getSurface().isValid());
                continue;   

                Canvas canvas = ourHolder.lockCanvas(); //Unreachable code
                canvas.drawRGB(02, 02, 150);
                ourHolder.unlockCanvasAndPost(canvas);
        }
    }
}
4

4 回答 4

7

这样做:

   if(!ourHolder.getSurface().isValid())   // remove semicolon 
            continue; 
于 2013-05-28T11:21:26.587 回答
1

你真的应该添加更多信息(哪一行是显示的错误)但这让我觉得很奇怪

if (!ourHolder.getSurface().isValid());
   continue;

如果为真或假,您正在执行一个不执行任何操作的条件。可能是这样的

if (!ourHolder.getSurface().isValid())
   continue;

更好的是,使用括号,(当然,适当的缩进)

if (!ourHolder.getSurface().isValid()) {
   continue;
}

本质上,由于continue;不在if语句中,它会一直执行。这将退出循环,使其余的循环代码无用,因为它永远不会被执行。由于编译器知道这样的代码很可能是编程错误的结果,所以它会抛出一个错误来警告程序员。

于 2013-05-28T11:21:52.230 回答
1

您的代码格式错误。它应该是:

while(isRunning){
    if(!ourHolder.getSurface().isValid()) {
        continue;   // without brackets it's always continue, regardless of the if
    }

    Canvas canvas = ourHolder.lockCanvas(); //Unreachable code
    canvas.drawRGB(02, 02, 150);
    ourHolder.unlockCanvasAndPost(canvas);
}
于 2013-05-28T11:21:52.603 回答
1

你应该删除;之后if(!ourHolder.getSurface().isValid())

于 2013-05-28T11:21:53.153 回答