. Advertisement .
..3..
. Advertisement .
..4..
I get the error: exception in thread “awt-eventqueue-0” java.lang.nullpointerexception when I try to run the program below:
package components;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Workshop extends JPanel
implements ItemListener {
JCheckBox winterhatButton;
JCheckBox sportshatButton;
JCheckBox santahatButton;
JCheckBox redshirtButton;
JCheckBox brownshirtButton;
JCheckBox suitButton;
JCheckBox denimjeansButton;
JCheckBox blackpantsButton;
JCheckBox khakipantsButton;
StringBuffer choices;
JLabel pictureLabel;
public Workshop() {
super(new BorderLayout());
//Create the check boxes.
winterhatButton = new JCheckBox("Winter Hat");
winterhatButton.setMnemonic(KeyEvent.VK_Q);
sportshatButton = new JCheckBox("Sports Hat");
sportshatButton.setMnemonic(KeyEvent.VK_W);
santahatButton = new JCheckBox("Santa hat");
santahatButton.setMnemonic(KeyEvent.VK_E);
redshirtButton = new JCheckBox("Red Shirt");
redshirtButton.setMnemonic(KeyEvent.VK_R);
brownshirtButton = new JCheckBox("Brown Shirt");
brownshirtButton.setMnemonic(KeyEvent.VK_T);
suitButton = new JCheckBox("Suit");
suitButton.setMnemonic(KeyEvent.VK_Y);
suitButton = new JCheckBox("Denim Jeans");
suitButton.setMnemonic(KeyEvent.VK_U);
blackpantsButton = new JCheckBox("Black Pants");
blackpantsButton.setMnemonic(KeyEvent.VK_I);
khakipantsButton = new JCheckBox("Khaki Pants");
khakipantsButton.setMnemonic(KeyEvent.VK_O);
//Register a listener for the check boxes.
winterhatButton.addItemListener(this);
sportshatButton.addItemListener(this);
santahatButton.addItemListener(this);
redshirtButton.addItemListener(this);
brownshirtButton.addItemListener(this);
suitButton.addItemListener(this);
denimjeansButton.addItemListener(this);
blackpantsButton.addItemListener(this);
khakipantsButton.addItemListener(this);
//Indicates
choices = new StringBuffer("---------");
//Set up the picture label
pictureLabel = new JLabel();
pictureLabel.setFont(pictureLabel.getFont().deriveFont(Font.ITALIC));
updatePicture();
//Put the check boxes in a column in a panel
JPanel checkPanel = new JPanel(new GridLayout(0, 1));
checkPanel.add(winterhatButton);
checkPanel.add(sportshatButton);
checkPanel.add(santahatButton);
checkPanel.add(redshirtButton);
checkPanel.add(brownshirtButton);
checkPanel.add(suitButton);
checkPanel.add(denimjeansButton);
checkPanel.add(blackpantsButton);
checkPanel.add(khakipantsButton);
add(checkPanel, BorderLayout.LINE_START);
add(pictureLabel, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}
/** Listens to the check boxes. */
public void itemStateChanged(ItemEvent e) {
int index = 0;
char c = '-';
Object source = e.getItemSelectable();
if (source == winterhatButton) {
index = 0;
c = 'q';
} else if (source == sportshatButton) {
index = 1;
c = 'w';
} else if (source == santahatButton) {
index = 2;
c = 'e';
} else if (source == redshirtButton) {
index = 3;
c = 'r';
} else if (source == brownshirtButton) {
index = 4;
c = 't';
} else if (source == suitButton) {
index = 5;
c = 'y';
} else if (source == denimjeansButton) {
index = 6;
c = 'u';
} else if (source == blackpantsButton) {
index = 7;
c = 'i';
} else if (source == khakipantsButton) {
index = 8;
c = 'o';
}
if (e.getStateChange() == ItemEvent.DESELECTED) {
c = '-';
}
//Apply the change to the string.
choices.setCharAt(index, c);
updatePicture();
}
protected void updatePicture() {
//Get the icon corresponding to the image.
ImageIcon icon = createImageIcon(
"images/bear/bear-"
+ choices.toString()
+ ".gif");
pictureLabel.setIcon(icon);
pictureLabel.setToolTipText(choices.toString());
if (icon == null) {
pictureLabel.setText("Missing Image");
} else {
pictureLabel.setText(null);
}
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = Workshop.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Build a Bear at Safeer's Workshop!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new Workshop();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
The error appears the system notifies as follows:
> run components.Workshop
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at components.Workshop.<init>(Workshop.java:75)
at components.Workshop.createAndShowGUI(Workshop.java:195)
at components.Workshop.access$0(Workshop.java:189)
at components.Workshop$1.run(Workshop.java:209)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
I tried to solve it with another sample. I got the reference in the community forum, but it still returned an invalid result. If someone knows the solution, please give me the support. Thanks!
The cause: The Public Workshop() is near the top of code.
The solution:
Above is shown in line 24
This would mean the
the word
could benot null
. Which means thatreadArray("words.txt")
didn’t return anything.Looking at the code for
readArray
, that would suggest you’re getting aFileNotFoundException
, which means the file doesn’t exist. Using the debugger to figure out the problem.NullPointerException
s are among the easier exceptions to diagnose, frequently. If you receive an exception in Java, you will see the stack trace. (That’s what your second quote block is called by the way.) You read the stack trace from top to bottom. You will often see exceptions in Java library code and native implementations methods. For diagnosis, you can skip those files until you see the code you wrote.Next, look at the line indicated. Look at each object (instantiated classes) on that line. One of them wasn’t created and you tried using it. To check if the constructor was called on this object, you can look up your code. If you did not, that is your problem. You need to call new Classname( arguments) to instantiate the object. Another frequent cause of
NullPointerException
s is accidentally declaring an object with local scope when there is an instance variable with the same name.Your constructor for Workshop at line 75 was the culprit in your exception.
init>
is the constructor of a class. You’ll notice the line if you look at that line in your code.This line contains two objects:
denimjeansButton
, andthis
.this
refers to the class instance that you are currently using. If you’re in a constructor, it cannot bethis
.denimjeansButton
are your culprits. That object was never instantiated. You can either remove thedenimjeansButton
reference or instantiate it.