1

我使用 opengl ES 2.0 开发 opengl android 应用程序。我的应用程序崩溃并在日志中写入:

07-28 22:55:29.460 13407-13420/?
E/AndroidRuntime:致命异常:com.jayway.gles20.GLES20Renderer.draw_worlddate(GLES20Renderer.java:521) 的 com.jayway.gles20.GLES20Renderer.onDrawFrame(GLES20Renderer.java:503) 的 GLThread 1293 java.lang.NullPointerException .jayway.gles20.GLRenderer.onDrawFrame(GLRenderer.java:87) 在 android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516) 在 android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)

此函数中的错误:

public void draw_worlddate(String wtype){
    Map<String,float[][][]> wdw=worlddate.world;
    float[][][] ww;
    ww = wdw.get(wtype);
    float[][] ww2;
    float[] ww3;
    for (int i=0;i<ww.length;i++){//this is line 521
        ww2=ww[i];

        Matrix.setIdentityM(mModelMatrix, 0);
        for(Integer i2=0;i2<ww2.length;i2++){

            ww3=ww2[i2];
            switch (i2){
                case 0:
                    Matrix.translateM(mModelMatrix,0,ww3[0],ww3[1],ww3[2]);
                break;
                case 1:
                    Matrix.rotateM(mModelMatrix,0,0.0f,ww3[0],ww3[1],ww3[2]);
                break;
                case 2:
                    Matrix.scaleM(mModelMatrix,0,ww3[0],ww3[1],ww3[2]);
                break;
            }
        }
        drawTriangle(mTriangle1Vertices);
    }
}

Map中的解析数组:

 {
            {
                    {
                            1.0f,
                            1.0f,
                            1.0f
                    },
                    {
                            1.0f,
                            1.0f,
                            1.0f
                    },
                    { 
                            1.0f,
                            1.0f,
                            1.0f
                    }
            }
    }

如何解决这个问题?

4

1 回答 1

1

Map wdw在尝试确定检索到的数组的长度之前,检查是否包含关联键的值

if (wdw.containsKey(wtype)) {
   ww = wdw.get(wtype);
   ...
   for (int i=0; i <ww.length;i++){
     ...
   }
}
于 2013-07-28T19:25:44.717 回答