我正在跟随新闻波士顿的教程。我一直遇到错误与无法访问的代码与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);
}
}
}
这样做:
if(!ourHolder.getSurface().isValid()) // remove semicolon
continue;
你应该在;
之后删除if(!ourHolder.getSurface().isValid())
你真的应该添加更多的信息(哪一行是显示的错误),但这让我很奇怪
if (!ourHolder.getSurface().isValid());
continue;
你正在做一个条件,如果为true,则不执行任何操作。可能它就像是
if (!ourHolder.getSurface().isValid())
continue;
更好的是,使用括号,(当然还有适当的缩进)
if (!ourHolder.getSurface().isValid()) {
continue;
}
本质上,由于continue;
不在if
声明中,它将始终执行。这将退出循环,使循环代码的其余部分无用,因为它永远不会被执行。由于编译器知道这样的代码可能是编程错误的结果,因此会引发错误警告程序员。
您的代码格式错误。它应该是:
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);
}