运行Java程序的错误 [英] Errors running Java program

查看:280
本文介绍了运行Java程序的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用netbeans运行我的java程序并且我得到这个错误,有什么建议吗?

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)

这是代码:

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();
            }
        });

    }


    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();
            }
        });

    }

}


推荐答案

看起来你传递给ImageIcon构造函数的一个(或多个)参数是null。

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"));    

image = new ImageIcon(MainForm.class.getResource("maryland_flag_round.gif")); 

在任何一种情况下,问题都是相同的:找不到资源,所以<$ getResource()返回c $ c> null 。你为什么不只是使用新的ImageIcon(字符串文件名)?我甚至不能100%确定getResource()正在做什么。

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); 不是一个好主意,我甚至不确定你是否可以像这样摆脱LayoutManager。

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.

使用更具描述性的名称! button1 应该被称为'interchangeButton'或沿着那些行。对于这么小的一段代码,没有人会迷失方向,但如果你曾经在一个更大的项目上工作,那么一个好的命名方案是至关重要的。

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.

这篇关于运行Java程序的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆