2013-07-16 56 views
0

表面視圖類中的線程使畫布繼續崩潰,因爲線程進入致命異常。然後發生NullPointerException。它說,問題發生在第28行,但一切都很好。然後程序跳過了數百幀。它說應用程序在主線程中做了太多工作。有沒有什麼辦法解決這一問題?SurfaceView線程失敗

下面是代碼:

package com.mtprogramming.blockfight; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class SView extends SurfaceView implements Runnable{ 

SurfaceHolder sviewholder; 
Thread thread = null; 
Boolean game = true; 
public SView(Context context) { 
    // TODO Auto-generated constructor stub 
    super(context); 
    sviewholder = getHolder(); 
    thread = new Thread(this); 
    thread.start(); 
} 

@Override 
public void run() { 
    while(game){ 
     if(sviewholder.getSurface().isValid()){ 
      continue; 
     } 
     Canvas sview = sviewholder.lockCanvas(); 
     sview.drawRGB(33, 66, 150); 
     sviewholder.unlockCanvasAndPost(sview); 
    } 

} 

} 

回答

0

的問題是,你得到持有人的參考是空的,因爲SurfaceHolder甚至還沒有被你使用它的時候創建的,不叫取而代之,執行SurfaceHolder回調並在創建表面之後啓動線程,並且一旦您真正參考了表面持有者...

關注!

+0

你能舉個例子嗎? – Nebraska