2010-12-07 3 views
0

Ich entwickle eine Anwendung für eine Firma, , die eine Oracle-Datenbank auf verschiedene Arten verwaltet. Das Programm ist in Java, NetBeans und es wird ziemlich groß. Ich würde nicht sagen, es ist sehr gut geschrieben, aber ich oft zurück zu älteren schlechten Code und versuchen, es als lesbar und oop machen, wie ich kann.Java - NullPointerException beim Start. Swing Bug oder fehlerhafte Implementierung?

Ich habe bemerkt, dass 1 von 10 Mal, als ich das Programm zu starten, ich die folgende Ausnahme erhalten: (obwohl das Programm gestartet und richtig, auch diese Zeiten funktioniert)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.plaf.synth.SynthLabelUI.getMinimumSize(SynthLabelUI.java:199) 
    at javax.swing.JComponent.getMinimumSize(JComponent.java:1702) 
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:2933) 
    at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2897) 
    at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1315) 
    at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2904) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1050) 
    at javax.swing.GroupLayout.prepare(GroupLayout.java:1037) 
    at javax.swing.GroupLayout.preferredLayoutSize(GroupLayout.java:857) 
    at java.awt.Container.preferredSize(Container.java:1599) 
    at java.awt.Container.getPreferredSize(Container.java:1584) 
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1624) 
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedPreferredSize(GroupLayout.java:2944) 
    at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:2930) 
    at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2897) 
    at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1315) 
    at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2904) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1593) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604) 
    at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1588) 
    at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568) 
    at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325) 
    at javax.swing.GroupLayout$SequentialGroup.setValidSize(GroupLayout.java:1972) 
    at javax.swing.GroupLayout$Group.setSize(GroupLayout.java:1553) 
    at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1058) 
    at javax.swing.GroupLayout.layoutContainer(GroupLayout.java:897) 
    at java.awt.Container.layout(Container.java:1421) 
    at java.awt.Container.doLayout(Container.java:1410) 
    at java.awt.Container.validateTree(Container.java:1507) 
    at java.awt.Container.validateTree(Container.java:1513) 
    at java.awt.Container.validateTree(Container.java:1513) 
    at java.awt.Container.validateTree(Container.java:1513) 
    at java.awt.Container.validateTree(Container.java:1513) 
    at java.awt.Container.validateTree(Container.java:1513) 
    at java.awt.Container.validate(Container.java:1480) 
    at java.awt.Window.dispatchEventImpl(Window.java:2473) 
    at java.awt.Component.dispatchEvent(Component.java:4460) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

Ich nehme an, es ist ein Swing Bug. Könnte es ein Problem bei meiner Implementierung sein? Warum passiert es 1 von 10 Mal und nicht immer? Kann ich etwas tun, um es zu vermeiden?

+5

Sie starten Sie die GUI auf dem EDT? – willcodejavaforfood

+0

@willcodejavaforfood: Guter Punkt. Ich bin der Meinung, dass Swing Ausnahmen auslösen sollte, wenn GUI-Operationen außerhalb des Event Dispatch Threads (wie SWT) ausgeführt werden. Indem sie keine Ausnahmen machen, setzen sie sich für Verstöße gegen das Prinzip des geringsten Erstaunens ein. :) –

+0

@Adam Paynter IMO Swing sollte nicht fadenfeindlich sein. Aber es ist und es kann nicht viel getan werden. –

Antwort

2

1 in 10 klingt, als könnte es irgendwo eine Race Condition sein. Da @willcodejavaforfood erwähnt wird, müssen Sie sicherstellen, dass alle GUI-Änderungen (einschließlich des Starts) im Ereignis-Versand-Thread (EDT) vorgenommen werden.

Sie können SwingUtilities.invokeAndWait und SwingUtilities.invokeLater verwenden, um sicherzustellen, dass der Code auf dem EDT ausgeführt wird.

0

Es sieht so aus, als würde die Benutzeroberfläche eine NullPointerException geben, aber sie ist nicht einfach da und über. Es kann andere Dinge geben, die die Benutzeroberfläche verwendet, die nicht richtig funktioniert oder so ähnlich. Könnten Sie den ganzen Fehler hier und das Fragment von Codes, die es verursachen, posten?

+0

der Fehler ist nicht reproduzierbar. Entschuldigung, ich habe das Ganze nicht behalten, also habe ich es nicht. Ich habe das Projekt 20 Mal ausgeführt, bin aber nicht aufgetaucht. –

+0

habe es wieder bekommen. fügte es in der ursprünglichen Nachricht –

1

In SynthDefaultLookup.java Linie 27 gibt es das:

public Object getDefault(JComponent c, ComponentUI ui, String key) { 
    if (!(ui instanceof SynthUI)) { 
     Object value = super.getDefault(c, ui, key); 
     return value; 
    } 
    SynthContext context = ((SynthUI)ui).getContext(c); 
    Object value = context.getStyle().get(context, key); // line 27 
    context.dispose(); 
    return value; 
} 

... vielleicht Rahmen eines ComponentUI? Haben Sie eine spezielle Benutzeroberfläche ohne ComponentUI?

(OK, es ist keine Antwort, ich entschuldige mich, aber es ist kein Kommentar, auch)

+0

Scheint wie eine vernünftige Antwort auf mich – willcodejavaforfood