0

I'm still new to Java and I'm having trouble with changing the image in a JLabel when a button has been clicked. I don't get any compiler errors but I do get a run time error.

Line 107: l1.setIcon(icon); 

"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"

public class HomeController1 extends JPanel implements ActionListener { private int choice; private JButton add; private JLabel l1; public HomeController1() { // Create panels and set layouts JPanel p1 = new JPanel(new GridLayout(1,4)); JPanel p2 = new JPanel (new GridLayout(3,3)); JPanel p3 = new JPanel(new BorderLayout()); // Create buttons add = new JButton("ADD APPLIANCE"); //Add ActionListeners add.addActionListener(this); // Add buttons to panel p1.add(add); // Default ImageIcon ImageIcon blank = new ImageIcon("blank.jpg"); // Create Jlabels to hold blank image JLabel l1 = new JLabel(blank); // Add JLabels to Panel p2.add(l1); //Add contents to Frame p3.add(p1,BorderLayout.SOUTH); p3.add(p2,BorderLayout.CENTER); add(p3); } public void actionPerformed(ActionEvent e) { if (e.getSource() == add) { choice = 0; if (choice == 0) { Clock clock1 = new Clock(); ImageIcon icon = clock1.getPicture(); l1.setIcon(icon); } } } 

}

Full Error Message:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at HomeController.actionPerformed(HomeController.java:107) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3312) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:688) at java.awt.EventQueue$3.run(EventQueue.java:686) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:702) at java.awt.EventQueue$4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
7
  • Copy/paste the entire stacktrace (that includes line numbers) as an edit to the question. Commented Apr 10, 2013 at 12:51
  • Clock clock1 = new Clock(); For better help sooner, post an SSCCE. Commented Apr 10, 2013 at 12:53
  • Likely that clock1.getPicture() is returning null. Commented Apr 10, 2013 at 12:53
  • 1
    All such java errors come with a stacktrace. The stacktrace tells you the line of code that has a null pointer. If you really can't figure it out from there, post the stacktrace. In addition, when posting problems with which you want help, post the conditions under which your error occurs. Is it when the program starts? When the button is clicked? Only on alternate Thursdays? Assume your volunteer helpers have never seen your program or your error message, and would like enough information to be able to help you. Commented Apr 10, 2013 at 12:54
  • @BlackBox its telling me that the null pointer is being returned on line 107 " l1.setIcon(icon); " ? Commented Apr 10, 2013 at 13:00

1 Answer 1

2

your problem comes from the fact that you have declared a global variable in home controller:

private JLabel l1; 

and another one, local, in your constructor:

// Create Jlabels to hold blank image JLabel l1 = new JLabel(blank); 

In your constructor, you defined a variable with the same name as in your class, but it's a different variable. The one in your constructor hides the one in your class. So, in the end, only your constructor variable is initialized. If you change your code like this in your constructor,

// Create Jlabels to hold blank image l1 = new JLabel(blank); 

Then you'll only have one global variable in your class and you won't get a NullPointerException.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, Its always the simple mistakes that catch you out.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.