Java 7 update 25 使我们的 java Web 启动应用程序失败,没有日志记录
自 Oracle 推出 java 7 update 25 以来,我们的应用程序不再运行。
最初,我们收到了一些关于清单文件中缺少代码库和 sercurity 标记的警告,我们已修复。
我们现在最终遇到的问题是,在控制台中,我们只得到以下行:
#### Java Web Start Error:
#### null
我们还会收到一个应用程序错误对话框,其中包含消息:无法启动应用程序。
详细信息按钮在“异常”中提供以下详细信息:
java.lang.NullPointerException
at com.sun.jnlp.JNLPClassLoader.getPermissions(Unknown Source)
at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at desktop.DesktopProxySelector.<init>(DesktopProxySelector.java:24) <- code smippet below
at desktop.Main.main(Main.java:139) <- code smippet below
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.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Thread.java:724)
相关的代码部分是:
Desktop.Main.main
/**
* Main method, starts the application
*/
public static void main(String[] args) {
System.setProperty("java.net.useSystemProxies", "true");
//Logger.getLogger("httpclient.wire.header.level").setLevel(Level.FINEST);
//Logger.getLogger("org.apache.commons.httpclient.level").setLevel(Level.FINEST);
java.net.ProxySelector.setDefault(new DesktopProxySelector(java.net.ProxySelector.getDefault()));
(最后一行是第 139 行)
desktop.DesktopProxySelector:
public class DesktopProxySelector extends ProxySelector {
public DesktopProxySelector(ProxySelector defaultSelector) {
URI httpsUri = new CentralConfigurationService().getCentralLocation();
(最后一行是发生异常的第 24 行)
有人可以给我们一些线索提示(或者更好的解决方案)由这个“次要”更新引起的java的新行为。
当我们使用java -jar Desktop直接从cli运行应用程序时.jar应用程序将运行文件,因此问题显然与java Web启动中的更改有关。
@trashgod:该错误显然与7u25中的权限更改有关,因为NullPointerException发生在com.sun.jnlp.JNLPClassLoader.getPermissions中。
只是为了解释我认为会发生什么(我是Wouter的同事):桌面。Main 实例化桌面。DesktopProxySelector(我们的类),桌面。DesktopProxySelector instantiates desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService instantiates a java.net.URI.
在 DesktopProxySelector init 的第一行中,中央配置服务被实例化,getPermissions 方法(由 JNLPClassLoader 调用)将抛出 NullPointerException。因此,在通过 java webstart 加载 CentralConfigurationService 类并获取该类的权限时出现问题。这是否与实例化URI类的事实有关,这需要额外的权限(设置与远程URI的连接)?