次の単純なコードに問題があります。SurfaceView を拡張する GraphicView クラスを作成します。onCreate メソッドで始まる別のスレッドで実行します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
GraphicView v = new GraphicView( this );
Thread thread = new Thread( v );
thread.start();
setContentView( v );
}
理由はわかりませんが、アプリケーションを閉じるとエラーが発生します。タブレットで英語の UI を使用していませんが、英語では「アプリケーションでエラーが発生しました」のように聞こえると思います。そして、それ以上のものはありません!多分私はスレッドを停止する必要がありますか?コードにエラーはありますか?
public class GraphicView extends SurfaceView implements Runnable {
Activity activity;
SurfaceHolder holder;
Paint paint;
public GraphicView( Activity activity ) {
super( activity );
this.activity = activity;
paint = new Paint();
paint.setColor( Color.YELLOW );
paint.setStyle( Style.FILL );
holder = getHolder();
}
@Override
public boolean onTouchEvent( MotionEvent me ) {
return false;
}
public void run() {
while ( true ) {
if ( !holder.getSurface().isValid() ) {
continue;
}
Canvas c = holder.lockCanvas();
c.drawARGB( 255, 128, 255, 80 );
holder.unlockCanvasAndPost( c );
}
}
}
したがって、エラーは次のとおりです。
10-31 00:02:20.124: W/KeyCharacterMap(278): No keyboard for id 0
10-31 00:02:20.124: W/KeyCharacterMap(278): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-31 00:02:21.104: W/dalvikvm(278): threadid=11: thread exiting with uncaught exception (group=0x4001d800)
10-31 00:02:21.124: E/AndroidRuntime(278): FATAL EXCEPTION: Thread-10
10-31 00:02:21.124: E/AndroidRuntime(278): java.lang.NullPointerException
10-31 00:02:21.124: E/AndroidRuntime(278): at com.example.GraphicView.run(GraphicView.java:192)
10-31 00:02:21.124: E/AndroidRuntime(278): at java.lang.Thread.run(Thread.java:1096)
GraphicView.java の 192 行目:
c.drawARGB( 255, 128, 255, 80 );