【问题标题】:java how to add image using getResource()?java如何使用getResource()添加图像?
【发布时间】:2016-03-10 00:49:51
【问题描述】:

我想将图像添加到 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 项目,所以这些类的路径是: 项目名称\src\main\java\application\mainClass.java 项目名称\src\main\java\application\Application.java

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

谢谢。

【问题讨论】:

  • 根据您的目录结构,我假设您使用的是 Maven。您要添加到 jar 中的资源(以后可以通过 getResources 访问)应该放在 projectName\src\main\resources 中,然后可以通过省略 resources 目录名称来访问它们。例如,如果您有一个名为 projectName\src\main\resources\Image.png 的资源,那么您将使用 use getClass().getResource("/Image.png");
  • @MadProgrammer 现在我明白了,谢谢。
  • 您的意思是“资源”吗?错字“资源”是否导致问题?
  • @Chrustopher Bottoms 实际上就像 MadProgrammer 解释的那样,文件夹资源应该在 src/main 文件夹中,是的,我写了 ressources(法语哈哈),它应该是资源。 :)

标签: java swing path getresource


【解决方案1】:

您需要将您的图片放在 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")

【讨论】:

    【解决方案2】:

    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观看验证一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 2012-06-19
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多