AWT:创建图标时出现 NullPointerException

AWT: NullPointerException when creating icon

每当我将图像设置为图标时,我都会收到错误消息。 这是我的 Addemployee 代码: https://pastebin.com/xnbXP1B2

错误是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
    at InheritancePackage.AddEmployee.initComponents(AddEmployee.java:471)
    at InheritancePackage.AddEmployee.<init>(AddEmployee.java:96)
    at InheritancePackage.Menu.MainAddMouseClicked(Menu.java:554)
    at InheritancePackage.Menu.mouseClicked(Menu.java:269)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6397)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4556)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

我在 jlabel 中设置图标的方式是通过 "Image Within Project",如果您检查项目菜单,则包含图片包。所有使用的图片都在 "picture" 包中。

有谁知道如何解决这个问题?

getResource() 找不到图像 returns null,这导致图标 class 出现问题。检查您的图片实际位置并使用正确的路径。

我注意到,您在这里使用了绝对路径,因为它以 /

开头
jLabel18.setIcon(new javax.swing.ImageIcon(getClass().getResource("/InheritancePackage/Save_1.png")));

在您的计算机上,图像位于所需位置:

/InheritancePackage/Save_1.png

但在不同的计算机上它不存在于 /InheritancePackage/Save_1.png 中,它与 jar 文件相关,因此未找到,因此图标出现 NullPointerException!!

相反,您应该使用相对路径,尝试在开头删除 / 并使用:

InheritancePackage/Save_1.png

我找到了解决办法。 分步解决方案:

  1. 右键单击您的项目

  2. 将鼠标悬停在 "new" 和 select "folder"

  3. 为您的文件夹命名 "src/main/resources"

  4. 将所有图像移动到该新文件夹

  5. 当select为图标添加图像时,进入图像新文件夹的那个包。

执行此操作后,将不再有空指针,并且在将其导出为 ZIP 时图像将转移。

这应该可以解决这个问题,因为它对我有用!