Stefanos Kargas
Stefanos Kargas

Reputation: 11073

Java - NullPointerException at start. Swing bug or faulty implementation?

I am developing an application for a company, which manages an oracle database in various ways. The program is in Java, NetBeans and it is getting pretty big. I wouldn't say it's very well written, but I often get back to older bad code and try to make it as readable and oop as I can.

I've noticed that 1 out of 10 times, when I start the program, I am getting the following Exception: (though the program starts and works right, even these times)

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)

I am assuming it is a swing bug. Could it be a problem in my implementation? Why is it happening 1 out of 10 times and not always? Can I do something to avoid it?

Upvotes: 0

Views: 749

Answers (3)

Istao
Istao

Reputation: 7585

In SynthDefaultLookup.java line 27 there is that :

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;
}

... perhaps context of a componentUI ? Have you some special UI with no ComponentUI ?

(OK it's not an answer, I apologize, but it's not a comment, too)

Upvotes: 1

Cameron Skinner
Cameron Skinner

Reputation: 54336

1 in 10 sounds like it could be a race condition somewhere. As @willcodejavaforfood mentioned, you need to make sure that all GUI changes (including startup) are done on the event dispatch thread (EDT).

You can use SwingUtilities.invokeAndWait and SwingUtilities.invokeLater to ensure that code is executed on the EDT.

Upvotes: 2

thotheolh
thotheolh

Reputation: 7450

It looks like the UI is giving a NullPointerException but it's not just there and over. There can be other things the UI is using that is not properly working or something like that. Could you post the whole error here and the fragment of codes causing it ?

Upvotes: 0

Related Questions