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
我找到了解决办法。
分步解决方案:
右键单击您的项目
将鼠标悬停在 "new" 和 select "folder"
上
为您的文件夹命名 "src/main/resources"
将所有图像移动到该新文件夹
当select为图标添加图像时,进入图像新文件夹的那个包。
执行此操作后,将不再有空指针,并且在将其导出为 ZIP 时图像将转移。
这应该可以解决这个问题,因为它对我有用!
每当我将图像设置为图标时,我都会收到错误消息。 这是我的 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
我找到了解决办法。 分步解决方案:
右键单击您的项目
将鼠标悬停在 "new" 和 select "folder"
上
为您的文件夹命名 "src/main/resources"
将所有图像移动到该新文件夹
当select为图标添加图像时,进入图像新文件夹的那个包。
执行此操作后,将不再有空指针,并且在将其导出为 ZIP 时图像将转移。
这应该可以解决这个问题,因为它对我有用!