我该如何修复 "javax.swing.ImageIcon.<init>(Unknown Source)"?

How can I fix "javax.swing.ImageIcon.<init>(Unknown Source)"?

我正在制作一个简单的 PONG 游戏程序,我的问题来自我想设置图像图标的 Main 方法,它向我抛出一个 NullPointerException。

我正在使用 Eclipse IDE 2019,06 和 Java 编译器 12.0.1。我使用的图像是.jpg。 我试图更改图像的目录但没有:(。 图像的目录位于与主文件夹相同的文件夹中 class.

这是我的框架代码:

    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.run(Menu.java:42)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access0(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.awt.EventQueue.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)

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

我猜 Menu.java 的第 57 行是这一行:

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

看起来 frame 尚未初始化,因此为空。这就是为什么你得到 NullPointerException.

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

<Project root>/src/main/resources

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