由於Oracle推出的Java 7更新25,我們的應用程序不再起作用。Java 7更新25使我們的Java Web Start應用程序失敗,無日誌記錄
最初我們對代碼庫&發出了一些警告,我們修復了Manifest文件中缺少的安全標籤。
我們現在結了的問題是,在控制檯中,我們只得到了下面幾行:
#### 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.jar直接從cli運行應用程序時,應用程序將運行文件,所以這個問題顯然與java web start中的更改有關。
@trashgod:錯誤顯然與7u25中的權限更改有關,因爲NullPointerException發生在com.sun.jnlp.JNLPClassLoader.getPermissions中。
只是爲了解釋什麼,我認爲會發生(我是沃特的同事): desktop.Main實例化一個desktop.DesktopProxySelector(我們班), desktop.DesktopProxySelector實例desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService實例化一個java.net.URI。
在實例化CentralConfigurationService的DesktopProxySelector init的第一行中,由JNLPClassLoader調用的getPermissions方法引發NullPointerException。所以事情錯了,而與得到的權限爲類加載在Java在webstart的CentralConfigurationService類。莫非是有什麼關係的事實,URI類實例化,這需要額外的權限(到遠程的URI連接設置)?
很好,JavaFX現在已包含在u25中,但我不知道這是否會激起_that_ – fge
到目前爲止,我只看到更新暴露了我自己的錯誤。另請參閱這些相關的[Q&A](http://stackoverflow.com/q/17210607/230513),[Q&A](http://stackoverflow.com/q/17204465/230513)。 – trashgod
這個問題似乎與java webstart中的網絡連接有關,並且對java 7u25中的權限系統進行了更改。只要我們註釋掉main中的第139行,在desktop.Main $ 2.run(Main.java:148)中就會發生完全相同的異常,它讀取HttpClientFactory.initialize();.所以在java 7u25的新權限系統中,似乎確實存在一個錯誤,其中java webstart中涉及到網絡連接。 –