Java Web Start + Jogl + MacOSX + JDK1.7

时间:2014-02-24 17:36:06

标签: java macos jogl

我有一个使用Jogl 1.0库http://easystoneshop.com/applets/CountertopQuote/index.html的项目。我的应用程序从Java Web Start开始。所有工作都没问题,但在Mac Os X 10.7.5上更新JDK 1.7.0.51我的项目不起作用。 Exeption:

JNLPClassLoader:查找库libjogl.dylib QueueFlusher中的异常: javax.media.opengl.GLException:java.lang.UnsatisfiedLinkError:sun.java2d.opengl.CGLSurfaceData.createCGLContextOnSurface(Lsun / java2d / opengl / CGLSurfaceData; J)J     在com.sun.opengl.impl.Java2D.createOGLContextOnSurface(Java2D.java:470)     在com.sun.opengl.impl.macosx.MacOSXJava2DGLContext.create(MacOSXJava2DGLContext.java:116)     at com.sun.opengl.impl.macosx.MacOSXJava2DGLContext.makeCurrentImpl(MacOSXJava2DGLContext.java:72)     at com.sun.opengl.impl.GLContextImpl.makeCurrent(GLContextImpl.java:134)     at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:182)     在javax.media.opengl.GLJPanel $ 2.run(GLJPanel.java:650)     at sun.java2d.opengl.OGLRenderQueue $ QueueFlusher.run(OGLRenderQueue.java:234) 引起:java.lang.UnsatisfiedLinkError:sun.java2d.opengl.CGLSurfaceData.createCGLContextOnSurface(Lsun / java2d / opengl / CGLSurfaceData; J)J     at sun.java2d.opengl.CGLSurfaceData.createCGLContextOnSurface(Native Method)     at sun.java2d.opengl.CGLSurfaceData.createOGLContextOnSurface(CGLSurfaceData.java:378)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:606)     at com.sun.opengl.impl.Java2D.createOGLContextOnSurface(Java2D.java:468)     ......还有6个

我尝试在Mac OS X 10.7.5上使用JDK 1.6.0.37运行项目并且都运行完毕。

我在JRE Library上添加了本机库文件libjogl.jnilib,并且作为应用程序在Mac上使用JDK 1.7。 我尝试将Jogl更新到2.2版,但有很多Exeption:

线程中的异常" AWT-EventQueue-0" javax.media.opengl.GLException:异常@ destroy&的联合身份验证(false)     在jogamp.opengl.GLContextImpl.destroy(GLContextImpl.java:447)     在javax.media.opengl.awt.GLJPanel $ OffscreenBackend.destroy(GLJPanel.java:1518)     在javax.media.opengl.awt.GLJPanel $ 6.run(GLJPanel.java:1248)     在javax.media.opengl.Threading.invoke(Threading.java:193)     在javax.media.opengl.awt.GLJPanel.dispose(GLJPanel.java:463)     在javax.media.opengl.awt.GLJPanel.removeNotify(GLJPanel.java:568)     在javax.media.opengl.awt.GLJPanel.destroy(GLJPanel.java:486)     在javax.media.opengl.awt.GLJPanel $ 2.run(GLJPanel.java:282)     在com.jogamp.nativewindow.awt.AWTWindowClosingProtocol $ WindowClosingAdapter.windowClosing(AWTWindowClosingProtocol.java:71)     在java.awt.Window.processWindowEvent(Window.java:2051)     在javax.swing.JFrame.processWindowEvent(JFrame.java:296)     在java.awt.Window.processEvent(Window.java:2009)     at java.awt.Component.dispatchEventImpl(Component.java:4861)     at java.awt.Container.dispatchEventImpl(Container.java:2287)     at java.awt.Window.dispatchEventImpl(Window.java:2719)     at java.awt.Component.dispatchEvent(Component.java:4687)     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)     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.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87)     at java.awt.EventQueue $ 4.run(EventQueue.java:708)     at java.awt.EventQueue $ 4.run(EventQueue.java:706)     at java.security.AccessController.doPrivileged(Native Method)     at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)     at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)     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) 引起:javax.media.opengl.GLException:线程[AWT-EventQueue-0,6,main] glGetError()在调用glFramebufferRenderbuffer(0x8D40,0x8CE0,0x8D41,0x0)后返回以下错误代码:GL_INVALID_OPERATION(1282 0x502) )     在javax.media.opengl.DebugGL4bc.writeGLError(DebugGL4bc.java:29490)     在javax.media.opengl.DebugGL4bc.glFramebufferRenderbuffer(DebugGL4bc.java:12353)     at com.jogamp.opengl.FBObject.detachColorbufferImpl(FBObject.java:1570)     在com.jogamp.opengl.FBObject.detachAllImpl(FBObject.java:1870)     at com.jogamp.opengl.FBObject.destroy(FBObject.java:1911)     在jogamp.opengl.GLFBODrawableImpl.initialize(GLFBODrawableImpl.java:163)     在jogamp.opengl.GLFBODrawableImpl.associateContext(GLFBODrawableImpl.java:347)     在jogamp.opengl.GLContextImpl.associateDrawable(GLContextImpl.java:733)     在jogamp.opengl.GLContextImpl.destroy(GLContextImpl.java:412)     ......还有33个

我知道这个问题可以很简单地解决,但我已经在第二周打赌了。请帮帮我。

2 个答案:

答案 0 :(得分:0)

Java 7 Update 51附带了一些针对Web Start和applet的新安全性更改。 See this link了解更详细的信息。有几件事情是:

  • 您需要使用有效证书对applet进行签名,而不是自签名证书。
  • 您需要更改jar以包含一些新属性到MANIFEST.MF
  • 您可能还需要更新标记以包含权限属性。

答案 1 :(得分:0)

JOGL 1的维护已于2010年停止,您必须切换到JOGL 2(目前为2.1.4)。由于公共API有一些变化,你必须修改你的应用程序(一些软件包已被移动,你必须使用GLProfile,缓冲区实用程序现在在Buffers类中,...)。如果您怀疑GLJPanel中存在错误,我建议您联系JogAmp维护人员,并且您必须遵循mikemil对您自己的JAR的建议。