导出后,java无法查找/绘制图像

Luk*_*ell 2 java resources swing image awt

你好stackoverflowites,

我正在开发一个2D游戏,当我在eclipse中运行它时,我的程序加载了它的所有图像和资源.但是,我使用的是不一定推荐的创建图像和图像图标的方法,如下所示:

bannerLogo.setIcon(new ImageIcon("/res/client/BannerHeader.jpg"));
Run Code Online (Sandbox Code Playgroud)

现在,当导出到jar时,它不会显示图像(这是预期的,因为我没有使用正确的方法.)

我搜索了正确的方法,我找到了:

URL imgURL = getClass().getResource("/res/client/BannerHeader.jpg");
Image bannerImg = Toolkit.getDefaultToolkit().getImage(imgURL);
bannerLogo.setIcon(new ImageIcon(bannerImg));
Run Code Online (Sandbox Code Playgroud)

而且没有任何工作,我得到一个"未捕获的错误获取图像:"痕迹,这只是告诉我,我的URL(imgUrl的)为空.(这是我在日食中运行的时候,请注意,我甚至还没有将其导出)

我认为它与我的类路径有关,但我无法弄清楚是什么.

在Eclipse中,我的包结构如下:

(父目录,项目名称)

+ src文件夹,在构建路径上有正常的包等

+资源文件夹,("res"),不在构建路径上(在构建路径上尝试过,没有任何更改)

+++资源文件夹的子目录

我不知道在这做什么.抱歉,文字墙.

Hov*_*els 7

您的代码最初是在寻找图像文件,而Jar文件中只存在文件,而不是资源.所以你尝试使用是正确的getClass.getResource("/res/client/BannerHeader.jpg");.但请确保映像实际上位于类文件目录之外的目录中的jar文件中,并使用相对于类路径目录的路径.

该错误并未告诉您这是错误的或文件为空,而是您需要将其放在try/catch块中.我建议您阅读" 例外教程"了解更多相关信息.

编辑1
当您声明有未捕获的异常错误时,我觉得您有编译错误,而不是运行时异常.对困惑感到抱歉.

至于放置图像的位置,它在某种程度上取决于您正在使用的IDE.我使用Eclipse,然后从我的java文件包目录中添加一个目录,我将其调用图像并将图像放在那里.然后我使用资源来查找"images/MyImage.jpg".

例如,假设我在Eclipse中的包看起来像这样:

Eclipse Package Explorer图像

所以类文件位于myPackage包中,图像文件GridBoxClassPic.JPG位于类文件目录的images目录中,因此我可以使用String找到它String RESOURCE_PATH = "images/GridBoxClassPic.JPG";.

此代码可以显示图像:

import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class MyClass {
   private static final String RESOURCE_PATH = "images/GridBoxClassPic.JPG";

   public MyClass() {
      try {
         BufferedImage image = ImageIO.read(getClass().getResource(RESOURCE_PATH));
         ImageIcon icon = new ImageIcon(image);
         JLabel label = new JLabel(icon);
         JOptionPane.showMessageDialog(null, label);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
      new MyClass();
   }
}
Run Code Online (Sandbox Code Playgroud)