我该如何修复 "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
我正在制作一个简单的 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