Errors running Java program
Im tying to run my java program using netbeans and im getting this error, any suggestion?
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:181)
at MainForm.addComponentsToPane(MainForm.java:28)
at MainForm.createAndShowGUI(MainForm.java:112)
at MainForm.access$000(MainForm.java:15)
at MainForm$4.run(MainForm.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
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)
this is the code:
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MainForm {
public static void addComponentsToPane(final JFrame frame, Container pane) {
Color colorGreen = new Color(0, 100, 0);
Color colorBrown = new Color(150, 100, 0);
//Color colorBlue = new Color (0, 0, 150);
//Font font = new Font("Verdana", Font.BOLD, 12);
pane.setLayout(null);
pane.setBackground(new Color (255, 255, 170));
//add image and necessary labels on top left corner
//SHA Image and label
ImageIcon image = new ImageIcon(MainForm.class.getResource("SHA_logo.gif"));
JLabel label = new JLabel("Office of Traffic & Safety", image, JLabel.LEFT);
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
label.setFont(new Font("Times New Roman", Font.PLAIN, 11));
pane.add(label);
label.setBounds(50, 10, 130, 100);
label.setBorder(null);
//university of maryland image and label\\\
image = new ImageIcon(MainForm.class.getResource("maryland_flag_round.gif"));
label = new JLabel("Univ. of Maryland", image, JLabel.LEFT);
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
label.setFont(new Font("Times New Roman", Font.PLAIN, 11));
pane.add(label);
label.setBounds(190, 10, 130, 90);
label.setBorder(null);
//critical lane label
label = new JLabel("Critical Lane Volume");
label.setFont(new Font("Arial Narrow", Font.BOLD, 30));
label.setForeground(colorGreen);
pane.add(label);
label.setBounds(50, 90, 250, 50);
label.setBorder(null);
label = new JLabel("<html>Please choose the analysis type:</html>");
label.setFont(new Font("Arial", Font.BOLD, 18));
label.setForeground(colorBrown);
pane.add(label);
label.setBounds(25, 130, 300, 70);
label.setBorder(null);
//back and exit buttons
JButton button1 = new JButton("Interchange");
JButton button2 = new JButton ("Intersection");
JButton button3 = new JButton ("Exit");
pane.add(button1);
pane.add(button2);
pane.add(button3);
button1.setBounds(75, 200, 200, 50);
button2.setBounds(75, 270, 200, 50);
button3.setBounds(75, 340, 200, 50);
//add attap label at bottom left
image = new ImageIcon(MainForm.class.getResource("attap_logo.gif"));
label = new JLabel(image);
pane.add(label);
label.setBounds(30, 380, 270, 90);
label.setBorder(null);
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
frame.setVisible(false);
frame.dispose();
InterchangeLoad.main(null);
}
});
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
frame.setVisible(false);
frame.dispose();
MultipleIntersectionLoad.main(null);
}
});
button3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
frame.setVisible(false);
frame.dispose()开发者_如何学JAVA;
}
});
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Critical Lane Volume");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(frame, frame.getContentPane());
frame.setSize(350, 500);
frame.setResizable(false);
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();
}
});
}
}
It looks like one (or more) of the arguments you are passing into your ImageIcon constructor are null.
EDIT
The exception is occurring at one of these two lines:
ImageIcon image = new ImageIcon(MainForm.class.getResource("SHA_logo.gif"));
or
image = new ImageIcon(MainForm.class.getResource("maryland_flag_round.gif"));
In either case, the problem is the same: the resource is not being found, and so null
is being returned by getResource(). Why aren't you just using new ImageIcon(String filename)
? I'm not even 100% sure what getResource() is doing.
A few other quick comments (suggestions) on your code:
pane.setLayout(null);
is not a good idea, I'm not even sure you can just get rid of the LayoutManager like that.
Reusing the same reference (image
and label
) multiple times for different objects is bad coding style. You're not saving any memory by doing that, and the code makes less sense.
Use more descriptive names! button1
should probably be called 'interchangeButton' or something along those lines. For such a small segment of code, no one will get lost, but if you ever work on a larger project, a good naming scheme is vital.
精彩评论