【问题标题】:Canvas - null pointer exception画布 - 空指针异常
【发布时间】:2013-07-09 17:23:27
【问题描述】:

有时,我会遇到 NullPointerException。请让我知道如何纠正这个问题。在出错的时候,我已经检查了变量 backgoundImage 中空值的可能性。变量backgoundImage不为空。

  canvas.drawBitmap(backgoundImage, 0, 0    , null);

代码:

    @Override
    public void run() {
        // TODO Auto-generated method stub
        ourHolder = getHolder();
        while (isRunning) { 
            if (!ourHolder.getSurface().isValid()){
                continue;
            } 
            canvas = ourHolder.lockCanvas();    
            screenCenterX = dWidth / 2; 
            screenCenterY = dHeight / 2;  

            //-----------------------------------------------------------------------------------
            if(backgoundImage == null){ 
                try { 
                    Log.i("DragDropCheck", "----------------backgoundImage is null--------");
                    backgoundImage = getAssetImage(getContext(),"backgroundhomepage");
                    canvas.drawBitmap(backgoundImage, 0, 0  , null); 
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }else{ 
                canvas.drawBitmap(backgoundImage, 0, 0  , null);
            } 
            //-----------------------------------------------------------------------------------

            if (imagePublishDone) {
                if(!welcomeDone){                       
                 welcomeDone=true;
                }
                moveImageInEllipticalPath();
            } else {
                initialImagePublish();
            } 
            centreReached = false;
            ourHolder.unlockCanvasAndPost(canvas);
        }
    } 

logcat:

07-09 22:40:18.689: E/AndroidRuntime(8794): FATAL EXCEPTION: Thread-621
07-09 22:40:18.689: E/AndroidRuntime(8794): java.lang.NullPointerEception
07-09 22:40:18.689: E/AndroidRuntime(8794): at com.eample.funandlearn.DragDrop$MyBringBackSurface.run(DragDrop.java:645)
07-09 22:40:18.689: E/AndroidRuntime(8794): at java.lang.Thread.run(Thread.java:856)

【问题讨论】:

  • 它的canvas 为空。
  • 你也测试过if(canvas!=null)吗?
  • 给我们确切的路线,否则有太多的假设。
  • 试试看这个问答:stackoverflow.com/questions/6921412/…
  • 这是出现错误的行 canvas.drawBitmap(backgoundImage, 0, 0 , null);这出现在 if 条件的 else 部分

标签: android android-canvas android-image


【解决方案1】:

问题可能在于canvas 变量是null。您应该管理该特定情况以避免在ourHolder.lockCanvas() 调用返回null 时执行代码(此外,您应该在执行while 循环之前检查您的ourHolder 变量不为空)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多