java如何使用getResource()添加图像?

时间:2015-12-04 23:41:27

标签: java swing path getresource

我想将图像添加到Jpanel类中,我使用方法getResource()但它返回Exception in thread "main" java.lang.IllegalArgumentException: input == null!,因为我提供的图像文件夹的路径无效,现在我想要如何为了得到有效的路径,我知道也许它真的很容易,这不是我要问的问题,但我花了很多时间尝试不同的路径,但它不起作用;

这里是Jpanel类

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;


public class Application extends JPanel  {

    private BufferedImage image;

    public Application() {
          try {
                image = ImageIO.read(getClass().getResource("/ressources/image.png"));
          } catch (IOException ex) {
                System.out.println("problem! image can't be loaded!");
          }
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);
    }
}

这里是主要的课程

import javax.swing.*;
//import java.awt.*;

public class mainClass {

        public mainClass () {

            JFrame app = new JFrame();
            app=.setTitle("main window");
            app=.setSize(400, 400);
            app=.setLocationRelativeTo(null);
            app=.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            app=.add(new Application()); 
            app=.setVisible(true);
        }

        public static void main(String[] args) {
            mainClass class = new mainClass();
        }
    }

错误显然在行中  image = ImageIO.read(getClass().getResource("/ressources/image.png"));

导致路径无效, 我使用maven项目,所以这个类的路径是: 的 PROJECTNAME \ SRC \主\的java \应用\ mainClass.java PROJECTNAME \ SRC \主\的java \应用\ Application.java

我创建了一个文件夹“ressources”,我将图像放在那里,这里是路径 的 PROJECTNAME \ ressources \ image.png

谢谢。

3 个答案:

答案 0 :(得分:2)

您需要将图像放在src / main / resources / image.png中,以便在此项目的资源根目录中看到它...并观察ressource的拼写。有关资源加载的详细摘要,请参阅http://www.mkyong.com/java/java-read-a-file-from-resources-folder/

然后这条线应该工作;

image = ImageIO.read(getClass()。getClassLoader()。getResource(" image.png")

答案 1 :(得分:0)

Aidan和abu的回答都是正确的,但我们可以在这里澄清一下。

项目的标准根文件夹定义为" src" ( JavaProject / src ),所以我们可以将 image.png 放在此文件夹中并输入:

1st method: image = ImageIO.read(new File("image.png"));

从您的程序(在Eclipse中)的角度来看,这将得到与此相同的结果:

2nd method: image = ImageIO.read(getClass().getClassLoader().getResource("image.png"));

现在,区别在于,当您要在 .jar 文件中导出项目时,第一行不会导出image.png文件,因为导出仅编译资源首先,你会得到错误,因为程序不再看到图像。这是第二种方法很有用的地方。因为它还会导出jar文件中的图像。您可以在内部使用winrar进行验证。

答案 2 :(得分:-1)

将ressources文件夹放在src文件夹中。