开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜