更新到7u45后,带有LWJGL的JavaApplet中断

更新到7u45后,带有LWJGL的JavaApplet中断,java,applet,lwjgl,Java,Applet,Lwjgl,我们有一个Java Aplet,几年来一直没有出现问题。它使用LWJGL,所有JAR都使用适当的证书进行签名(不是自签名)。 上次Java更新到u45后,小程序崩溃 我们迄今为止所做的工作: 添加权限:所有JAR清单的所有权限 将应用程序库允许的代码库:*添加到所有JAR的清单中 将调用方允许的代码库:*添加到所有JAR的清单中 将代码库:*添加到所有JAR的清单中 上面的不同排列 我知道安全警告的配置方式发生了一些变化,但是(目前!)我们不关心请求权限的弹出窗口。首先,我们要让它发挥作用

我们有一个Java Aplet,几年来一直没有出现问题。它使用LWJGL,所有JAR都使用适当的证书进行签名(不是自签名)。 上次Java更新到u45后,小程序崩溃

我们迄今为止所做的工作:

  • 添加权限:所有JAR清单的所有权限
  • 将应用程序库允许的代码库:*添加到所有JAR的清单中
  • 将调用方允许的代码库:*添加到所有JAR的清单中
  • 将代码库:*添加到所有JAR的清单中
  • 上面的不同排列
我知道安全警告的配置方式发生了一些变化,但是(目前!)我们不关心请求权限的弹出窗口。首先,我们要让它发挥作用

下面是java控制台中发生的所有例外。输出的其余部分似乎正常:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.lwjgl.util.applet.AppletLoader$4.getPermissions(AppletLoader.java:1206)
    at java.security.SecureClassLoader.getProtectionDomain(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.lwjgl.util.applet.AppletLoader.switchApplet(AppletLoader.java:1319)
    at org.lwjgl.util.applet.AppletLoader$2.run(AppletLoader.java:909)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at sun.plugin2.applet.Plugin2ClassLoader.loadAllowedCodebases(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.getPermissions(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.getPermissions(Unknown Source)
    ... 31 more
以及:

java.lang.reflect.InvocationTargetException
位于java.awt.EventQueue.invokeAndWait(未知源)
位于java.awt.EventQueue.invokeAndWait(未知源)
在org.lwjgl.util.applet.AppletLoader.run(AppletLoader.java:906)上
位于java.lang.Thread.run(未知源)
原因:java.lang.ExceptionInInitializeError
位于org.lwjgl.Sys.createImplementation(Sys.java:124)
在org.lwjgl.Sys.(Sys.java:111)
位于org.lwjgl.opengl.AWTGLCanvas(AWTGLCanvas.java:87)
在j2cad.d.c.k(未知来源)
位于j2cad.applet.J2CadApplet.init(未知源)
位于org.lwjgl.util.applet.AppletLoader.switchApplet(AppletLoader.java:1330)
位于org.lwjgl.util.applet.AppletLoader$2.run(AppletLoader.java:909)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$200(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
原因:java.security.AccessControlException:拒绝访问(“java.util.PropertyPermission”“org.lwjgl.util.Debug”“读取”)
位于java.security.AccessControlContext.checkPermission(未知源)
位于java.security.AccessController.checkPermission(未知源)
位于java.lang.SecurityManager.checkPermission(未知源)
位于sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(未知源)
位于java.lang.SecurityManager.checkPropertyAccess(未知源)
位于java.lang.System.getProperty(未知源)
位于java.lang.Boolean.getBoolean(未知源)
在org.lwjgl.LWJGLUtil$4.run(LWJGLUtil.java:454)
在org.lwjgl.LWJGLUtil$4.run(LWJGLUtil.java:452)
位于java.security.AccessController.doPrivileged(本机方法)
位于org.lwjgl.LWJGLUtil.getPrivilegedBoolean(LWJGLUtil.java:452)
在org.lwjgl.LWJGLUtil.(LWJGLUtil.java:265)
... 还有21个
第一次出现多次,第二次只在日志末尾出现一次

所有的建议都很感谢,网站是谁做了更新的每个人了


谢谢大家

由于lwjgl_util_applet.jar中的AppletLoader通过替换默认的类加载器来覆盖安全上下文,因此我找到了一个令人毛骨悚然的解决方法来避免这个问题。因此,我们需要修补它:

1-下载课程

2-将其替换为:

classLoader = new URLClassLoader(urls) {
为此:

classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader()) {
Class appletClass = Thread.currentThread().getContextClassLoader().loadClass(getParameter("al_main"));
这:

为此:

classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader()) {
Class appletClass = Thread.currentThread().getContextClassLoader().loadClass(getParameter("al_main"));
这是:

urlconnection.setDefaultUseCaches(false);
为此:

urlconnection.setDefaultUseCaches(true);
3-编译lwjgl_util_applet.jar的.class,并用新类重写它

4-删除所有JAR(如果存在)的签名,并与MANIFEST.MF中的所有atributes重新签名

Manifest-Version: 1.0
Trusted-Library: true
Application-Library-Allowable-Codebase: *
Trusted-Only: false
Application-Name: My app
Permissions: all-permissions
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Caller-Allowable-Codebase: *
Codebase: *
5-在小程序标记中,放入以下内容:

<param name="permissions" value="all-permissions">
<param name="codebase_lookup" value="true">
<param name="classloader_cache" value="false">
<param name="al_version" value="0.1">"

"
6-(令人毛骨悚然的部分)把所有的罐子放在param“档案”中的param“al_jars”中(只在al_jars中放一个空格)

7-清理缓存(java和浏览器)并将java缓存设置为活动状态(如应用程序的未来用户)


8-运行你的小程序,祝你好运。

谢谢,我已经在lwjgl论坛上读了你的帖子。特别是500mb cach的最后一部分,到目前为止阻止了我的尝试。这是一个非常活跃的网站,我们的用户使用它,所以我们有点害怕尝试。不过我会尝试一下,祝你好运:)我刚刚编辑了我的帖子要解决缓存问题,小程序现在运行良好。只需将DefaultUseCaches设置为true。