我完成了一个正在研究的Java游戏。 试图通过双击图标来运行它,但没有运行。它在Eclipse中运行良好。
试图从命令行运行它。给我一个NullPointerException
,在我在Eclipse里面的src文件夹中名为sprites的文件夹中的一些图像资源上。
出于某种原因,在Eclipse外部运行时,它找不到此资源。
有什么建议吗?
我使用的是Windows XP。 IDE是Eclipse。在Eclipse中,正如我所说,没有问题。 我使用以下命令来使用图像资源:
Image image = new ImageIcon(this.getClass().getResource("/sprites/picture.PNG").getImage();
我在JAR内部检查过,所有资源都在里面。
sprites
是src
内的文件夹。所以据我所知,它应该有效。有什么问题?
答案 0 :(得分:1)
如果您的来源是这样的:
/src
/mypackage
/myresourcespackage
- Resources.java
- image.png
您可以使用
加载image.png
ImageIO.read(Resources.class.getResource("image.png"));
答案 1 :(得分:1)
试试MyClass.class.getResourceAsStream()
。使用此方法指定图像的路径时,路径相对于MyClass.class 已编译的文件。不是你的.java文件,也不是你的项目目录。
例如,如果您的文件系统如下所示:
+ Project Folder
|
-> + src
| |
| -> MyClass.java
|
-> + bin
|
-> MyClass.class
-> myImage.png
然后,您将使用以下代码从BufferedImage
myImage.png
InputStream stream = MyClass.class.getResourceAsStream("myImage.png");
BufferedImage myImage = ImageIO.read(stream);
请记住,在使用getResourceAsStream()
方法时,必须指定相对于.class文件的路径,而不是.java文件。许多IDE将它们放在不同的位置。
您可以使用文件系统获得高级功能,但只需确保所有路径都正确即可。 例如,如果您的文件系统如下所示:
+ Project Folder
|
-> + src
| |
| -> MyClass.java
|
-> + bin
|
-> MyClass.class
-> + Sprites
|
-> + Images
|
-> myImage.png
您只需将文件路径从myImage.png
更改为Sprites/Images/myImage.png"
即可。请注意文件扩展名的使用以及缺少前导/
。
答案 2 :(得分:0)
如果资源文件打包到jar文件中,请使用
ClassLoader.getResourceAsStream
或Class.getResourceAsStream
它们绝对是从类路径加载资源数据的方法。