【问题标题】:Processing weird Null Pointer Exception (something with PGraphics)处理奇怪的空指针异常(PGraphics 的东西)
【发布时间】:2017-01-17 00:37:05
【问题描述】:

无论出于何种原因,当我运行我的程序时,我都会收到 NullPointerException。这是崩溃日志:

java.lang.NullPointerException
    at processing.awt.PGraphicsJava2D.getRaster(PGraphicsJava2D.java:2727)
    at processing.awt.PGraphicsJava2D.loadPixels(PGraphicsJava2D.java:2751)
    at processing.opengl.PGraphicsOpenGL.initCache(PGraphicsOpenGL.java:6471)
    at processing.opengl.PGraphicsOpenGL.getTexture(PGraphicsOpenGL.java:6424)
    at processing.opengl.PGraphicsOpenGL$TexCache.getTexture(PGraphicsOpenGL.java:7464)
    at processing.opengl.PGraphicsOpenGL.flushPolys(PGraphicsOpenGL.java:2430)
    at processing.opengl.PGraphicsOpenGL.flush(PGraphicsOpenGL.java:2371)
    at processing.opengl.PGraphicsOpenGL.endDraw(PGraphicsOpenGL.java:1540)
    at processing.core.PApplet.handleDraw(PApplet.java:2436)
    at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:884)
    at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
    at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
    at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
    at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
    at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
    at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
    at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
    at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
    at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Could not run the sketch (Target VM failed to initialize).
For more information, read revisions.txt and Help ? Troubleshooting.

这只发生在我使用 P2D/P3D 时。 JAVA2D 工作得很好,但我想使用 P2D,否则程序会很迟钝。

【问题讨论】:

  • 请发帖minimal reproducible example。请注意,这应该注意是您的整个草图。足够的代码,我们可以复制和粘贴来查看错误。
  • @IqPGM 您有机会发布完整代码吗?我的直觉是你在主草图中使用的渲染器与在 PGraphics 中使用的渲染器不同(例如,在 size()createGraphics() 中使用 P2D
  • @GeorgeProfenza 谢谢,这行得通。我不知道createGraphics() 中的这个参数。再次感谢。
  • @lqPGM 太棒了!我已添加上述注释作为答案,以方便将来参考

标签: processing


【解决方案1】:

请仔细检查您的草图和 PGraphics 都使用了显式渲染器,尤其是 GL 渲染器(例如 P2D/P3D)。

例如:

PGraphics buffer;

void setup(){
  size(400,400,P3D);

  buffer = createGraphics(width,height,P3D);
  buffer.beginDraw();
  buffer.background(0);
  buffer.sphereDetail(4);
  buffer.noFill();
  buffer.endDraw();

}
void draw(){
  float size = map(sin(frameCount * .01),-1.0,1.0,0.0,100.0);  

  buffer.beginDraw();
  buffer.stroke(255,size * 0.5);
  buffer.translate(mouseX,mouseY,0);
  buffer.rotate(frameCount * 0.01,0.5,0.5,1.0);
  buffer.sphere(size);
  buffer.endDraw();

  image(buffer,0,0); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多