【问题标题】:Surfaceview androidSurfaceview 安卓
【发布时间】:2013-05-28 04:39:04
【问题描述】:

我是 Android 新手。我正在尝试使用表面视图开发游戏应用程序。该应用程序运行正常,但最后当我退出时,它在 onDraw() 方法上显示空指针异常并且应用程序崩溃。请帮助我并提前感谢。 这是我的代码:-

public class Gameloopthread extends Thread {

    private Gameview view;
    static final long fps=30;
    boolean running;

    public Gameloopthread(Gameview view)
    {
        this.view=view;
    }
    // we have to tell thread to shut down & wait for it to finish, or else
    // it might touch the Surface after we return and explode
    public void setRunning(Boolean run)
    {
        running=true;
    }
    @Override
    public void run() {
        long tickps=3000/fps;
        long startTime=0;
        long sleepTime;

        while(running)
        {
            Canvas c=null;


            try{
                c=view.getHolder().lockCanvas();
                //Log.d("Canvas==>",""+c);
                synchronized(view.getHolder()){
                    view.onDraw(c);

                }
            }finally{
                if(c!=null){
                    view.getHolder().unlockCanvasAndPost(c);
                }
            }
            sleepTime=tickps-(System.currentTimeMillis()-startTime);
            try{
                if(sleepTime>0)
                {
                    sleep(sleepTime);
                }else{
                    sleep(30);
                }
            }catch(Exception e){

            }
        }
        super.run();

    }
//  

}

【问题讨论】:

  • onDraw() 代码和 logcat 输出会很有用。
  • 是的,请发布 logcat!
  • 在 stackoverflow 中搜索此错误。有几个问题(包括我的一个)可以解决这个问题。

标签: android surfaceview


【解决方案1】:

您应该查看 lockCanvas 调用,表面可能已被破坏,并且您已将 null 画布引用传递给 view.onDraw()。 API 中有一些关于如何处理表面状态的建议。

http://developer.android.com/reference/android/view/SurfaceHolder.html#lockCanvas()

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多