在java中显示图像

时间:2015-12-25 06:26:15

标签: java image swing embedded-resource illegalargumentexception

public void loadStdImage() throws IOException
{
    Image image = ImageIO.read(this.getClass().getResource("/Resources/Images/Student/Capture.png"));  //Line 350
    ImageIcon icon = new ImageIcon(image);
    JLabel lblImage = new JLabel(icon);
    lblImage.setIcon(icon);
    lblImage.setBounds(753, 50, 149, 171);
    add(lblImage);
}

我尝试了很多东西......但没有任何结果。连续显示以下运行时错误

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at View.Student.loadStdImage(Student.java:350)

项目文件夹结构是:

Project Explorer view in Eclipse for a project

编辑: 找到了解决方案。请参阅下图和上图中资源文件夹图标的更改。我将我的资源文件夹添加到Java Build Path。右键单击您的项目,转到属性,然后选择“Java Build Path”,从那里将您的文件夹添加到java构建路径。 干杯 enter image description here

1 个答案:

答案 0 :(得分:3)

欢迎来到SO。正如您在这里的新人,请阅读此内容 - https://stackoverflow.com/help/mcve

现在让我帮你解决这个问题。

我有标准的Eclipse项目:

Eclipse project

我的测试类看起来像(最小):

package q34460547;

import java.awt.Image;
import java.io.IOException;

import javax.imageio.ImageIO;

public class LoadTest {

    public static void main(String[] args) throws IOException {
        new LoadTest().loadStdImage();
    }

    public void loadStdImage() throws IOException {
        Image image = ImageIO.read(this.getClass().getResource("/ScreenShot005.png"));
    }

}

现在,当我使用

ImageIO.read(this.getClass().getResource("/ScreenShot005.png"));

图像是从Eclipse中的res所谓的源文件夹加载的。

当我使用

ImageIO.read(this.getClass().getResource("ScreenShot005.png"));

从LoadTest.java文件所在的文件夹加载的图像(确切地说,它也被编译到同一个文件夹 - 在Eclipse中它的bin)。

您可以在此处找到更多信息 - What is the difference between Class.getResource() and ClassLoader.getResource()?

修改

图片必须位于类路径上(使用Class.getResource时),这就是为什么它没有从Resources文件夹加载的原因。有两个选项,使用其他版本的ImageIO.read()或将您的Resources文件夹设为源文件夹:

Project properties - source folders in Eclipse