如何修复“ javax.swing.ImageIcon。<init>(未知来源)”?

时间:2019-08-08 15:39:31

标签: java image nullpointerexception imageicon

我正在编写一个PONG游戏的简单程序,而我的问题来自Main方法,我想设置一个图像图标,并向我射击NullPointerException。

我正在使用Eclipse IDE 2019,06和Java Compiler 12.0.1。我正在使用的图像是.jpg。 我试图改变图像的目录,什么也没有:(。 图像目录位于与主类相同的文件夹中。

这是我的框架代码:

    public class Menu {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Menu window = new Menu();
                    window.frame.setVisible(true);
                    window.frame.setLocationRelativeTo(null);
                    window.frame.setTitle("PONG!");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Menu() {
        frame.setIconImage(new ImageIcon(Menu.class.getResource("/icon.jpg")).getImage());
        initialize();
    }

这是错误消息:

java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at gui.Menu.<init>(Menu.java:57)
    at gui.Menu$1.run(Menu.java:42)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(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$JavaSecurityAccessImpl.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)

希望您能帮助我解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:1)

我猜Menu.java的第57行是此行:

frame.setIconImage(new ImageIcon(Menu.class.getResource("/icon.jpg")).getImage());

frame似乎尚未初始化,因此为null。这就是为什么您得到NullPointerException的原因。

答案 1 :(得分:0)

在使用Maven构建系统(例如netbeans 11.3,maven 3.3.x)时,必须注意放置资源的位置。 “ /icon.jpg”路径是相对于您的资源目录的。尝试创建一个名为“ resources”(原文如此)的目录作为java主源目录的子目录。例如,“资源”的路径应为

<Project root>/src/main/resources

您将图像文件放置在此目录或/src/main/resources/icons/icon.jpg的子目录中