Hello stackoverflowites,
我正在开发一个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中,我的包结构如下:
(父目录,项目名称)
+ src文件夹,在构建路径上有正常的包等
+资源文件夹,(“res”),不在构建路径上(在构建路径上尝试过,没有任何更改)
资源文件夹的+++子目录我不知道该怎么做这些家伙。抱歉,文字墙。
答案 0 :(得分:7)
您的代码最初正在寻找图像文件,并且Jar文件中不存在文件,只有资源。所以你尝试使用getClass.getResource("/res/client/BannerHeader.jpg");
是正确的。但请确保映像实际上位于类文件目录之外的目录中的jar文件中,并使用相对于类路径目录的路径。
该错误并未告诉您这是错误的或文件为空,而是您需要将其放在try / catch块中。我建议你阅读Exceptions Tutorial了解更多信息。
编辑1
当你声明你有一个未捕获的异常错误时,在我看来你有一个编译错误,而不是运行时异常。对不起,感到困惑。
至于放置图像的位置,它在某种程度上取决于您使用的IDE。我使用Eclipse,然后从我的java文件包目录中添加一个目录,我将其调用图像并将图像放在那里。然后我使用资源来查找“images / MyImage.jpg”。
例如,假设我在Eclipse中的包看起来像这样:
因此类文件位于myPackage包中,图像文件GridBoxClassPic.JPG位于类文件目录之外的images目录中,因此我可以使用字符串String RESOURCE_PATH = "images/GridBoxClassPic.JPG";
找到它。 / p>
此代码可以显示图像:
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();
}
}
答案 1 :(得分:1)
好吧,如果你按照方法一,我认为你需要在eclipse中创建runnable jar文件。然后,您需要将正在加载的图像放在与jar文件相同的目录中,并具有您在程序中提到的相同路径。例如
your_directory
---> game_runnable.jar
---> res
---> client
-->BannerHeader.png
我认为它会起作用。