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

导出后,java无法查找/绘制图像,java,image,swing,resources,awt,Java,Image,Swing,Resources,Awt,你好,斯塔克福威茨 我正在开发一个2d游戏,当我在eclipse中运行它时,我的程序会很好地加载它的所有图像和资源。但是,我正在使用不一定推荐的方式创建我的图像和图像图标,如下所示: bannerLogo.setIcon(new ImageIcon("/res/client/BannerHeader.jpg")); 现在,当导出到jar时,它不会显示图像(这是预期的,因为我没有使用正确的方式) 我找到了正确的方法,我发现: URL imgURL = getClass().getResource

你好,斯塔克福威茨

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

bannerLogo.setIcon(new ImageIcon("/res/client/BannerHeader.jpg"));
现在,当导出到jar时,它不会显示图像(这是预期的,因为我没有使用正确的方式)

我找到了正确的方法,我发现:

URL imgURL = getClass().getResource("/res/client/BannerHeader.jpg");
Image bannerImg = Toolkit.getDefaultToolkit().getImage(imgURL);
bannerLogo.setIcon(new ImageIcon(bannerImg));
这也不起作用,我得到了一个“未捕获的错误抓取图像:”跟踪,它只是告诉我我的URL(imgURL)是空的。(这是我在eclipse内部运行的时候,请注意,我甚至还没有导出它)

我认为这与我的类路径有关,但我不知道是什么

在eclipse内部,我的包结构如下:

(父目录,项目名称)

+src文件夹,在生成路径上有普通包等

+资源文件夹(“res”),不在生成路径上(在生成路径上尝试过,未更改)

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


伙计们,我不知道在这里该怎么办。对不起,这是文字墙

如果您遵循方法一,我认为您需要在eclipse中创建可运行的jar文件。然后,您需要将正在加载的图像放在与jar文件相同的目录中,具有与您在程序中提到的相同的相对路径。比如说

 your_directory
             ---> game_runnable.jar
             ---> res
                  ---> client 
                       -->BannerHeader.png

我认为它会起作用。

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

错误并不是告诉您这是错误的,或者文件是空的,而是您需要将其放在try/catch块中。我建议你阅读更多关于这方面的文章

编辑1
当您声明您有一个未捕获的异常错误时,我觉得您有一个编译错误,而不是运行时异常。很抱歉给你带来了困惑

至于在哪里放置图像,这在某种程度上取决于您使用的IDE。我使用Eclipse,从java文件包目录中添加一个目录,我称之为images,并将我的图像放在那里。然后我使用参考资料查找“images/MyImage.jpg”

例如,假设我在Eclipse中的包是这样的:

因此类文件位于myPackage包中,而图像文件GridBoxClassPic.JPG位于类文件目录之外的images目录中,因此我可以使用字符串
String RESOURCE\u 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();
   }
}

导出JAR时,图像文件也会被导出吗?我只是从默认的导出菜单中导出可运行的JAR,但当我打开它时,它就在那里。您使用的路径是相对路径还是绝对路径?所以您认为我应该手动进入文件并移动,直到它们与eclipse中的相同吗?我觉得一定有比这更好的办法/不,不需要将图像放在与类文件相同的目录中,事实上我建议不要这样做。而是将它们放在类文件之外的目录中,可能是标题为images的目录。然后将这些作为资源而不是文件查找。这并没有解决他没有捕获异常的问题,并且错误地建议“遵循方法1”,这意味着在Jar文件中查找文件-方法1是他在代码中提到的简单链接。资源没有打包到jar文件中,只有类被打包。您需要创建runnable jar文件,并直接在与runnable jar相同的级别上添加“resources文件夹”。您不是在jar本身中寻找任何文件,而是使用定义的相对路径来访问图像。您所说的“在类文件目录之外的目录中的jar文件中”是什么意思?当我把它放在一个try/catch中时,我得到的就是这个错误,它似乎是一个致命的错误pI发现了,我引用了一个和我的src文件夹级别相同的文件夹,不管出于什么原因,它都不喜欢这样。非常感谢你们,你们两个都帮了忙。:)@BitCrash:请参见编辑1编辑2:--叹气,浪费时间。。。但事实并非如此,因为不管有没有我的帮助,你都能解决问题。干得好