在Scala中复制Java OpenGL ES 2.0演示时出现奇数NullPointerException

在Scala中复制Java OpenGL ES 2.0演示时出现奇数NullPointerException,scala,opengl-es-2.0,jogl,Scala,Opengl Es 2.0,Jogl,我正在尝试在Scala中复制一个关于如何使用OpenGLES2.0的Java演示。编译成功,但尝试执行此操作会产生以下输出: Main() called libEGL warning: DRI2: failed to authenticate Chosen GL capabilities: GLCaps[glx vid 0xae, fbc 0x17a: rgba 8/8/8/8, trans-rgba 0xff/ff/ff/ff, accum-rgba 16/16/16/16, dp/st/ms

我正在尝试在Scala中复制一个关于如何使用OpenGLES2.0的Java演示。编译成功,但尝试执行此操作会产生以下输出:

Main() called
libEGL warning: DRI2: failed to authenticate
Chosen GL capabilities: GLCaps[glx vid 0xae, fbc 0x17a: rgba 8/8/8/8,
trans-rgba 0xff/ff/ff/ff, accum-rgba 16/16/16/16, dp/st/ms 24/0/0, dbl, mono  , hw,    
GLProfile[GL2ES2/GL3.hw], on-scr[.]]
INIT GL IS: jogamp.opengl.gl4.GL4bcImpl
GL_VENDOR: NVIDIA Corporation 
GL_RENDERER: GeForce GTX 260/PCIe/SSE2
GL_VERSION: 3.3.0 NVIDIA 304.88

vertex Shader successfully compiled!
fragment Shader successfully compiled!
Exception in thread "main-Display-.x11_:0.0-1-EDT-1" java.lang.NullPointerException
at jogamp.newt.driver.x11.DisplayDriver.dispatchMessagesNative(DisplayDriver.java:103)
at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:540)
at jogamp.newt.DisplayImpl$5.run(DisplayImpl.java:463)
at jogamp.newt.DefaultEDTUtil$NEDT.run(DefaultEDTUtil.java:326)
X11Util.Display: Shutdown (JVM shutdown: true, open (no close attempt): 2/2, reusable 
(open, marked uncloseable): 0, pending (open in creation order): 2)
X11Util: Open X11 Display Connections: 2
X11Util: Open[0]: NamedX11Display[:0.0, 0x7da0cab0, refCount 1, unCloseable false]
X11Util: Open[1]: NamedX11Display[:0.0, 0x7da1bea8, refCount 1, unCloseable false]
它成功地渲染了异常出现之前的一帧或几帧。当我从jswat调试器运行它时,预期不会出现。

我是不是错过了一些很明显的东西?还有其他人在使用Scala和OpenGL ES 2.0时遇到过类似的问题吗?

我正在使用LinuxMint13和Ant来编译和运行代码。我的Scala代码是:

导入javax.media.opengl.GL;
导入javax.media.opengl.GL2ES2;
导入javax.media.opengl.GLAutoDrawable;
导入javax.media.opengl.GLEventListener;
导入javax.media.opengl.GLProfile;
导入javax.media.opengl.gl功能;
导入com.jogamp.newt.opengl.GLWindow;
导入com.jogamp.opengl.util;
导入com.jogamp.common.nio.Buffers;
导入java.nio.FloatBuffer;
//显式启用postifx长度运算符:
导入scala.language.postfix;
对象矩形显示器扩展了GLEventListener{
val vertexShaderCode:数组[字符串]=
数组(“#如果(版本)>=130\n”,
“#在中定义属性\n”,
“#定义变量输出\n”,
“#endif\n”,
“#如果定义为GL\n”,
“精度中间泵浮动;\n”,
“精度mediump int;\n”,
“#endif\n”,
“一致mat4一致_投影;\n”,
“属性向量4属性位置;\n”,
“属性向量4属性颜色;\n”,
“可变vec4可变颜色;\n”,
“作废主(作废)\n”,
“{\n”,
“变化颜色=属性颜色;\n”,
“gl\U位置=均匀投影*属性\U位置;\n”,
“}\n”)
val fragmentShaderCode:数组[字符串]=
数组(“#如果(版本)>=130\n”,
“#定义在\n中变化”,
“out vec4 mgl\u FragColor;\n”,
“#定义纹理2D纹理\n”,
“#定义gl_FragColor mgl#u FragColor\n”,
“#endif\n”,
“#如果定义为GL\n”,
“精度中间泵浮动;\n”,
“精度mediump int;\n”,
“#endif\n”,
“可变vec4可变颜色;\n”,
“作废主(作废)\n”,
“{\n”,
“gl\u FragColor=variabling\u Color;\n”,
“}\n”)
变量宽度:Int=640
变量高度:Int=480
//斯金巴尔·穆森(Scheinbar müssen)是一个充满变数的地方
变量着色器程序:Int=0
var vertexShader:Int=0
var fragmentShader:Int=0
var vboHandles:Array[Int]=新数组[Int](2)
变量vboVertices:Int=0
变量vboColors:Int=0
var ModelViewProjectionMatrix_位置:Int=0
def CompileShaderInto程序(gl:GL2ES2,阴影:Int,阴影代码:数组[String]):单位={
/*println(“着色器代码”)

对于(l我认为您需要首先调试。 在gl.glcreateprogram之后使用“println”,在bug的确切来源处进行调试

“空指针异常”比任何其他奇怪的错误都更容易找到。(仅限我!)


使用这种方法,找出异常首先出现的地方。

您确实需要添加更多日志,以帮助缩小可能导致NPE的范围,而不是提供一堵代码墙。