Nur einer meiner hunderten Benutzer hat Probleme beim Starten meiner Java-Desktop-App. Es startet nur etwa ein Drittel der Zeit für ihn. Die anderen zwei Drittel der Zeit wird eine NullPointerException beim Starten geworfen:
Ausnahme im Thread "AWT-EventQueue-0" java.lang.NullPointerException
bei java.util.Hashtable.put(Hashtable.java:394)
bei javax.swing.JEditorPane.registerEditorKitForContentType(JEditorPane.java:1327)
bei javax.swing.JEditorPane.registerEditorKitForContentType(JEditorPane.java:1309)
bei javax.swing.JEditorPane.loadDefaultKitsIfNecessary(JEditorPane.java:1387)
bei javax.swing.JEditorPane.getKitTypeRegistry(JEditorPane.java:1344)
bei javax.swing.JEditorPane.getEditorKitClassNameForContentType(JEditorPane.java:1340)
bei javax.swing.JTextPane.(JTextPane.java:76)
bei myapp.Launcher$1.run(Launcher.java:13)
bei java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
bei java.awt.EventQueue.dispatchEvent(EventQueue.java:633)
bei java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
bei java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
bei java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
bei java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
bei java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
bei java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Ich habe den Aufrufstapel verfolgt, um herauszufinden, dass die Ursache darin liegt, dass
Thread.currentThread().getContextClassLoader()
in JEditorPane null zurückgibt.
Ein Google-Suche ergibt, dass es sich um ein sporadisches, sehr seltenes und mysteriöses Problem handelt, das einige Leute betrifft.
Meine Frage ist, was kann ich als Workaround tun? Folgendes könnte funktionieren, wenn ich es vor dem Erstellen eines EditorPanes aufrufe:
Thread.currentThread().setContextClassLoader(MyClass.class.getClassLoader());
Aber ich verstehe Klassenlader nicht wirklich so gut, wie ich möchte (und habe versucht, sie besser zu verstehen). Ich habe das Gefühl, dass eine Änderung des contextClassLoader im EDT negative Auswirkungen haben könnte.
Habt ihr Ideen, was ich tun kann?
EDIT: Ich hatte einige Korrespondenz mit jemandem, der Java-ClassLoader gut versteht. Es scheint, dass dies ein obskurer ClassLoader-Rennzustand ist. Das heißt, ein Fehler in Java.
0 Stimmen
Besteht die Möglichkeit, das Java-Laufzeitumgebung des Benutzers zu aktualisieren?
0 Stimmen
@Tamás, dies ist eine Mac-App. Ich habe ihn gebeten, das neueste Mac Java-Update auszuprobieren.