2013-06-21 2 views
13

Seit dem von Oracle gestarteten Java 7 Update 25 funktioniert unsere Anwendung nicht mehr.Java 7 Update 25 lässt unsere Java Web Start Anwendung mit keiner Protokollierung fehlschlagen

Zunächst erhielten wir eine Warnung über Codebase & Sericity-Tags in der Manifest-Datei fehlt, die wir behoben haben.

Das Problem, das wir mit ist am Ende jetzt, dass wir nur in der Konsole die folgenden Zeilen erhalten:

#### Java Web Start Error: 
#### null 

Wir bekommen auch einen Anwendungsfehler Dialog mit der Meldung: können nicht die Anwendung starten.

die Schaltfläche Details gibt die folgenden Details in der Ausnahme:

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) 

Die entsprechenden Codeteile sind:

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())); 

(Die letzte Zeile ist die Zeilennummer 139)

desktop.DesktopProxySelector: 

public class DesktopProxySelector extends ProxySelector { 

    public DesktopProxySelector(ProxySelector defaultSelector) { 
    URI httpsUri = new CentralConfigurationService().getCentralLocation(); 

(Die letzte Zeile ist die Zeilennummer 24, an der die Ausnahme auftritt)

Kann uns jemand Hinweise geben (oder besser eine Lösung) für dieses neue Verhalten von Java, verursacht durch dieses "kleine" Update.

Wenn wir die Anwendung direkt aus dem CLI mit java -jar Desktop.jar ausführen, wird die Anwendung Datei ausführen, so hat das Problem eindeutig etwas mit den Änderungen in Java Web Start zu tun.

@trashgod: Der Fehler hat eindeutig etwas mit der Änderung der Berechtigungen in 7u25 zu tun, da die NullPointerException in com.sun.jnlp.JNLPClassLoader.getPermissions auftritt.

einfach zu erklären, was ich denke, passiert (Ich bin ein Kollege von Wouter): desktop.Main eine desktop.DesktopProxySelector (unsere Klasse) instanziiert instanziiert desktop.DesktopProxySelector desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService instanziiert eine java.net.URI.

In der ersten Zeile der DesktopProxySelector-Init, in der der CentralConfigurationService instanziiert wird, löst die getPermissions-Methode, die von JNLPClassLoader aufgerufen wird, die NullPointerException aus. Beim Laden der CentralConfigurationService-Klasse durch Java Webstart mit dem Abrufen der Berechtigungen für die Klasse ist daher ein Fehler aufgetreten. Könnte das etwas mit der Tatsache zu tun haben, dass eine URI-Klasse instanziiert wird, was zusätzliche Berechtigungen erfordert (eine Verbindung zu einem Remote-URI ist eingerichtet)?

+0

Nun gut, JavaFX ist jetzt in u25 enthalten von dem, was ich gelesen habe, aber ich weiß nicht, ob das _that_ – fge

+0

provozieren konnte Bisher sehe ich nur das Update meine eigenen Fehler offen legen. Siehe auch diese [F & A] (http://stackoverflow.com/q/17210607/230513), [Q & A] (http://stackoverflow.com/q/17204465/230513). – trashgod

+0

Das Problem scheint mit Netzwerkverbindungen in Java Webstart zusammenhängen, mit den Änderungen des Berechtigungssystems in Java 7u25. Sobald wir die Zeile 139 in main auskommentieren, tritt genau die gleiche Ausnahme bei desktop.Main $ 2.run (Main.java:148) auf, das HttpClientFactory.initialize() liest. Es scheint wirklich, dass es einen Fehler im neuen Berechtigungssystem in Java 7u25 gibt, wo Netzwerkverbindungen in Java Webstart betroffen sind. –

Antwort

6

Schließlich wurde das Problem gelöst. Das Problem wurde zwischen einem Konflikt zwischen den enthaltenen JAR-Dateien in der Hauptdatei MANIFEST.MF und den in launch.jnlp erwähnten JAR-Dateien verursacht.

Offensichtlich müssen jetzt alle JAR-Dateien, die verwendet werden, auch in der Datei launch.jnlp vorhanden sein.

(In der Vergangenheit wurde beschlossen, diese Datei manuell in der Senke zu speichern, was offensichtlich nicht immer ordnungsgemäß funktionierte. Jetzt ist dieser Prozess automatisiert und das Problem sollte uns nicht mehr passieren.)

+1

das scheint wie eine schlechte Idee - erfordern doppelte Informationen in der .jar-Datei und der jnlp-Datei schafft die Möglichkeit für Fehler ohne Hinzufügen von Sicherheit (da Sie den Inhalt der beiden) – ddyer

+0

Das ist etwas, das für mich passiert automatisch von Netbeans . Könnte damit zusammenhängen, wie das Projekt in der Vergangenheit aufgebaut wurde. – Wouter

+0

@Wouter, ich benutze Netbeans, um meine .jnlp App zu kompilieren. Ich bekomme diesen Fehler auch. Wie fügen Sie die JAR-Dateien zur MANIFEST.MF-Datei hinzu? – ryvantage

Verwandte Themen