【问题标题】:Where have I to put an image to use it to create a new Swing ImageIcon object?我在哪里放置图像以使用它来创建新的 Swing ImageIcon 对象?
【发布时间】:2013-10-01 05:22:07
【问题描述】:

我正在学习 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.<init>(ImageIcon.java:205)
    at com.andrea.second.SimpleMenu.initUI(SimpleMenu.java:23)
    at com.andrea.second.SimpleMenu.<init>(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,我必须把这个图像放在哪里?

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

在 Eclipse 中我该怎么做才能解决这个问题?

【问题讨论】:

    标签: java swing embedded-resource imageicon


    【解决方案1】:

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

    您需要将exit.pnggetClass()所代表的Class放在同一个包中。

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

    你需要把它放在你的类路径的根目录下。在 Eclipse 中,可以通过将其直接放入 src 来实现。

    The Class#getResource(String) javadoc states

    在委托之前,绝对资源名称由 使用此算法给定资源名称:

    如果名称以'/'('\u002f')开头,则绝对名称 资源是名称中“/”之后的部分。

    否则,绝对名称的格式如下:

    modified_pa​​ckage_name/name 其中 modified_pa​​ckage_name 是 此对象的包名称,用“/”替换“。” ('\u002e')。

    【讨论】:

    • mmm 有一些奇怪的地方,因为我使用 getClass().getResource("exit.png") 并且我已将“exit.png”图像放入由 getClass() 表示的类的同一目录中) 但它仍然不起作用......有什么想法吗?
    • @AndreaNobili 放到包含这段代码的类的包里。那是你做的吗?该文件的名称是否准确为exit.png
    • 是的,但是我已经把它放在我的“计算机资源”而不是 Eclipse 中,是正确的还是我必须通过 Eclipse 插入它?在这种情况下,我该怎么做才能使用 Eclipse 将图像插入到包中? Tnx
    • @Andrea 我不知道您所说的计算机资源是什么意思。只需将文件拖放到 Eclipse 的包资源管理器中的正确包中即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多