Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
On 8 =C9=C0=CE, 18:56, Warren Tang <warren.t...@nospam.com> wrote:
Hello,
I see nothing wrong within my beginner's program, yet it throws an
NullPointerException. Could you look through the code and tell where I
was doing wrong please? I am using Fedora Linux / Eclipse JDT if that
matters.
Here is the stack trace, followed by the source code.
----------------------------------
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at tang.warren.LookFrame.makeButton(LookTest.java:40)
at tang.warren.LookFrame.<init>(LookTest.java:31)
at tang.warren.LookTest$1.run(LookTest.java:13)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:2=
27)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:603)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.j=
av-a:276)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java=
:2-01)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.j=
av-a:191)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.ja=
va:186)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.ja=
va:178)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)
----------------------------------
package tang.warren;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
public class LookTest {
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
JFrame f = new LookFrame();
f.setVisible(true);
}
});
}
}
class LookFrame extends JFrame {
private JPanel lookPanel;
public LookFrame(){
this.setTitle("Look and Feel");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(Toolkit.getDefaultToolkit().getScreenSize())=
;
for(LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels(=
))
{
//if(laf != null)
makeButton(laf);
}
lookPanel = new JPanel();
this.add(lookPanel);
}
private void makeButton(final LookAndFeelInfo laf) {
JButton lookButton = new JButton(laf.getName());
lookPanel.add(lookButton);
lookButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg) {
try {
UIManager.setLookAndFeel(laf.getC=
lassName());
SwingUtilities.updateComponentTre=
eUI(LookFrame.this);
}catch(Exception e){
e.printStackTrace();
}
}
});
}
}
Hello!
You have NPE in method makeButton in line:
--->lookPanel.add(lookButton);
You create lookPanel only after cycle, where you create buttons.
Modify you code like this:
private JPanel lookPanel;
public LookFrame(){
this.setTitle("Look and Feel");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(Toolkit.getDefaultToolkit().getScreenSize
());
lookPanel = new JPanel();
for(LookAndFeelInfo laf :
UIManager.getInstalledLookAndFeels())
{
//if(laf != null)
makeButton(laf);
}
this.add(lookPanel);
}