2010-12-07 2 views
0

Je développe une application pour une entreprise, qui gère une base de données Oracle de différentes manières. Le programme est en Java, NetBeans et il devient assez gros. Je ne dirais pas que c'est très bien écrit, mais j'ai souvent revenir à plus mauvais code plus ancien et essayer de le rendre aussi lisible et oop que je peux.Java - NullPointerException au démarrage. Bug Swing ou une mise en œuvre défectueuse?

J'ai remarqué que 1 fois sur 10, quand je commence le programme , je recevais l'exception suivante: (si le programme démarre et fonctionne bien, même ces temps)

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) 

Je suppose que c'est un bug swing. Cela pourrait-il être un problème dans ma mise en œuvre? Pourquoi cela se passe-t-il 1 fois sur 10 et pas toujours? Puis-je faire quelque chose pour l'éviter?

+5

vous ne commencez l'interface graphique de l'EDT? – willcodejavaforfood

+0

@willcodejavaforfood: Bon point. Je suis d'avis que Swing devrait lancer des exceptions si les opérations de GUI sont effectuées en dehors du Thread Dispatch d'événement (comme SWT). En ne lançant pas d'exceptions, ils s'érigent en violation du principe du moindre étonnement. :) –

+0

@Adam Paynter IMO Swing n'aurait pas dû être hostile au thread. Mais c'est le cas et il n'y a pas grand chose à faire à ce sujet maintenant. –

Répondre

2

1 sur 10 semble être une condition de course quelque part. Comme @willcodejavaforfood mentionné, vous devez vous assurer que toutes les modifications de l'interface graphique (y compris le démarrage) sont effectuées sur le thread d'expédition d'événement (EDT).

Vous pouvez utiliser SwingUtilities.invokeAndWait et SwingUtilities.invokeLater pour vous assurer que le code est exécuté sur l'EDT.

0

Il semble que l'interface utilisateur donne une exception NullPointerException, mais ce n'est pas juste là et plus. Il peut y avoir d'autres choses que l'interface utilisateur utilise qui ne fonctionne pas correctement ou quelque chose comme ça. Pourriez-vous poster toute l'erreur ici et le fragment de codes qui la provoque?

+0

l'erreur n'est pas reproductible. Désolé je n'ai pas gardé tout le truc alors je ne l'ai pas. Je cours le projet 20 fois mais je ne suis pas apparu. –

+0

l'a encore obtenu. ajouté dans le message original –

1

Dans SynthDefaultLookup.java ligne 27, il est que:

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

... peut-être d'un contexte componentUI? Avez-vous une interface utilisateur spéciale sans ComponentUI?

(OK ce n'est pas une réponse, je suis désolé, mais ce n'est pas un commentaire aussi)

+0

On dirait une réponse raisonnable à moi – willcodejavaforfood