【问题标题】:Incredibly persistent nullpointerexception (java/processing)难以置信的持久空指针异常(java/processing)
【发布时间】:2014-12-02 03:40:26
【问题描述】:

-问题- 所以我试图制作一个正在处理的程序(我正在使用java运行,所以它基于java)。 该程序制作了一个由 3 维点组成的网格并对其进行处理。现在它在上面画小圆圈来验证它的工作原理。我正在调试以找出为什么所有的圆圈都没有绘制,并且我以某种方式创建了一个我无法摆脱的错误。无论我做什么,第 43 行总是出现 nullpointerexception 错误。我尝试制作一个新的脚本文件并将代码复制+粘贴到那里,重新启动处理 IDE 等,但似乎没有任何解决方法。我可以在上面或下面添加语句来操纵哪一行是 43 但它不会改变错误..这里有熟悉处理的人可以帮助我吗?我不知道如何将错误消息解释为“查看第 43 行是否有被称为 null 的内容”,这就是我感到困惑的原因。

-代码-

int sizex = 20;
int sizey = 20;
int framewidth = 800;
int frameheight = 800;
int[][] points = new int[(framewidth/sizex+1)*(frameheight/sizey+1)][];

void setup(){
  noLoop();
  background(255);
  size(framewidth,frameheight,P3D);
  ellipseMode(CENTER);

  for(int x = 0; x<=framewidth/sizex; x++){
    for(int y = 0; y<=frameheight/sizey; y++){
      int[] point =  {x*sizex,y*sizey,0};
      //print("\nx:"+x+" y:"+y+" place:"+place);
      points[x*(framewidth/sizex)+y] = point;
      //place++;
    }
  }
}

void draw(){
  int sinstep = 0;
  for(int count = 0; count < points.length; count++){
    int[] temp = points[count];
    temp[2]=(int)(100*Math.sin(sinstep/100));
    points[count] = temp;
  }
  sinstep++;

  for(int x = 0; x<=framewidth/sizex; x++){
    for(int y = 0; y<=frameheight/sizey; y++){
      //print(x+", "+y);
      int[] p = {1,2,3};
      find(x,y);
      ellipse(p[0],p[1],10,10);  
      }
   }
}
void find(int x, int y){
  print("yourmom");
  //This is where the error is //int[] temp = points[(x-1)*(framewidth/sizex)+y
  int[] z = {x,y,x+y};
}

-错误信息-

java.lang.RuntimeException: java.lang.NullPointerException
at com.jogamp.common.util.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58)
at jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103)
at jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:206)
at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:172)
at javax.media.opengl.Threading.invoke(Threading.java:191)
at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:541)
at processing.opengl.PJOGL.requestDraw(PJOGL.java:688)
at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1651)
at processing.core.PApplet.run(PApplet.java:2256)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at *triangles.draw(triangles.java:43)*
at processing.core.PApplet.handleDraw(PApplet.java:2386)
at processing.opengl.PJOGL$PGLListener.display(PJOGL.java:862)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:665)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:649)
at javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1289)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1119)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:994)
at javax.media.opengl.awt.GLCanvas$11.run(GLCanvas.java:1300)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:302)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

【问题讨论】:

  • 第 43 行是哪一行?
  • 这可能是points 数组未正确初始化。代码int[][] points = new int[(framewidth/sizex+1)*(frameheight/sizey+1)][]; 未初始化第二维。
  • 你的 draw() 函数是一团糟。为什么要使用 2D 数组而不是创建 Point 类或类似的东西?
  • @Eizooz,你可以在你的 draw 函数中打印 temp.length,在你分配它之后吗?很确定这就是您的错误所在,但如果不查看整个代码,我就无法判断。
  • 43 由注释标记 //这是错误所在,但它在另一个注释的行上,因此令人困惑。尽管就像我解释的那样,该行不会更改或遵循任何代码。我使用二维数组,因为我无法找到支持维度的点类,而且我还不知道如何制作自己的。这是我的全部代码。

标签: java nullpointerexception null processing


【解决方案1】:

这是数组实例化。现在确定这是如何在看似无关的部分中导致错误消息的,但它现在工作得非常酷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多