我在哪里放一个图像来使用它来创建一个新的Swing ImageIcon对象?

我正在研究Java Swing库,我遇到了问题。

在一个示例程序中,它通过以下行创建一个ImageIcon对象:

ImageIcon icon = new ImageIcon(getClass().getResource("exit.png")); 

当我执行我的程序时,我得到以下错误:由于在项目中缺少exit.png

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.ImageIcon.(ImageIcon.java:205) at com.andrea.second.SimpleMenu.initUI(SimpleMenu.java:23) at com.andrea.second.SimpleMenu.(SimpleMenu.java:17) at com.andrea.second.SimpleMenu$2.run(SimpleMenu.java:53) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

问题是,使用Eclipse,我必须把这个immage放在哪里?

我尝试将它(在我的文件系统中,而不是在Eclipse中)复制并粘贴到包含创建它的类的相同包文件夹中…但它不起作用

我有什么办法在Eclipse中解决这个问题?

 ImageIcon icon = new ImageIcon(getClass().getResource("exit.png")); 

您需要将exit.png放在与getClass()表示的类相同的包中。

 ImageIcon icon = new ImageIcon(getClass().getResource("/exit.png")); // note leading / 

您需要将它放在类路径的根目录中。 在Eclipse中,通过将其直接放在src中会发生这种情况。

Class#getResource(String) javadoc状态

在委派之前,使用此算法从给定资源名称构造绝对资源名称:

如果名称以’/’(’\ u002f’)开头,则资源的绝对名称是’/’后面的名称部分。

否则,绝对名称具有以下forms:

modified_pa​​ckage_name / name其中modified_pa​​ckage_name是此对象的包名称,其中’/’替换为’。’ ( ‘\ u002e’)。