[Java] Random NullPointerExceptions in AWT-EventQueue-0?

Pagina: 1
Acties:

  • Stephan11117
  • Registratie: Mei 2004
  • Laatst online: 05-05 13:37
Ik krijg meestal wel een runtime java.lang.NullPointerException maar niet altijd. Het gaat om exact de volgende foutmelding.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:117)
    at javax.swing.UIDefaults.getUI(UIDefaults.java:719)
    at javax.swing.UIManager.getUI(UIManager.java:860)
    at javax.swing.JLabel.updateUI(JLabel.java:251)
    at javax.swing.JLabel.<init>(JLabel.java:140)
    at javax.swing.JLabel.<init>(JLabel.java:199)
    at SplashScreen.<init>(SplashScreen.java:27)
    at SplashScreen.<init>(SplashScreen.java:13)
    at SplashScreen$1.run(SplashScreen.java:76)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Dit is een gedeelte van de source van de classe SplashScreen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import javax.swing.*;
import java.awt.*;

public class SplashScreen {

    private SplashScreen() {
        splashLabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("image/plaatje.gif")));
        splashLabelText = new JLabel("label");
        splashLabelText.setVerticalAlignment(SwingConstants.BOTTOM);
        splashLabelText.setHorizontalAlignment(SwingConstants.RIGHT);
        splashscreen = new JWindow();
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(splashLabel, BorderLayout.CENTER);
        panel.add(splashLabelText, BorderLayout.SOUTH);
        splashscreen.getContentPane().add(panel);
        splashscreen.pack();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        splashscreen.setLocation(screenSize.width >> 1 - splashscreen.getSize().width >> 1,
                screenSize.height >> 1 - splashscreen.getSize().height >> 1);

    }
 }

De regelnummering komt overigens niet meer overeen met die in de foutmelding. SplashScreen.java:27 is nu SplashScreen.java:7.

Hoe is het mogelijk dat deze NullPointer soms wel optreedt en soms niet? En waar wordt deze door veroorzaakt?

Oja, ik maak gebruik van JDK versie 5.0 Update 2.

[ Voor 8% gewijzigd door Stephan11117 op 19-04-2005 18:06 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 08-05 12:07

momania

iPhone 30! Bam!

Als je de volgende regel nou eens gewoon in meerdere stappen doet:
Java:
1
splashLabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("image/plaatje.gif"))); 

Waarschijnlijk zal dat plaatje gewoon niet goed laden.

Neem je whisky mee, is het te weinig... *zucht*


  • Stephan11117
  • Registratie: Mei 2004
  • Laatst online: 05-05 13:37
Nieuwe code
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private SplashScreen() {
        ImageIcon icon =  new ImageIcon(getClass().getClassLoader().getResource("image/flexcentre.gif"));
        splashLabel = new JLabel(icon);
        splashLabelText = new JLabel("label");
        splashLabelText.setVerticalAlignment(SwingConstants.BOTTOM);
        splashLabelText.setHorizontalAlignment(SwingConstants.RIGHT);
        splashscreen = new JWindow();
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(splashLabel, BorderLayout.CENTER);
        panel.add(splashLabelText, BorderLayout.SOUTH);
        splashscreen.getContentPane().add(panel);
        splashscreen.pack();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        splashscreen.setLocation((screenSize.width >> 1) - (splashscreen.getSize().width >> 1),
                (screenSize.height >> 1) - (splashscreen.getSize().height >> 1));

    }

Ik krijg nog steeds dezelfde foutmelding. Regel 3 uit de code hierboven zou de fout oproepen. Dan is de instantie van ImageIcon al gemaakt.

[ Voor 10% gewijzigd door Stephan11117 op 19-04-2005 18:44 ]


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 06-05 23:46
Ik heb eens die foutmelding in google gegooid. Ik kwam hier terecht.

Het is een iets andere foutmelding dan die van jou, maar misschien helpt hun oplossing.
Hun oplossing was dit:
UIManager.getLookAndFeelDefaults().put( "ClassLoader",
getClass().getClassLoader() );

Weet niet of dat helpt.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 08-05 12:07

momania

iPhone 30! Bam!

SynchroSteve schreef op dinsdag 19 april 2005 @ 18:42:
Dan is de instantie van ImageIcon al gemaakt.
En hoe weet je dat zo zeker, je controleert het niet in je code.

Neem je whisky mee, is het te weinig... *zucht*