我无法帮助它,但我认为我错过了线程来回答我的问题,但我现在已经找了很长时间但似乎无法找到帮助我需要。
我的问题很简单: 我创造了一个游戏(或者更确切地说是我在游戏过程中)并且我试图为它添加精灵(对敌人来说是png文件)。在IDE中加载它们的工作正常但是当我创建一个jar文件并尝试打开它时,它只是说"发生了Java异常"。进一步的调查显示问题在于它无法找到我告诉它加载的文件。
通过我读过的帖子,我收集了这么多: 要么我没有正确加载图像,这意味着我没有使用正确的代码,或者 我的MANIFEST.mf不包含" Class-Path" (意思是参数是空白的,实际上它们是)
找到其他代码并不适合我。人们建议使用我无法工作的ClassLoader。尝试一下就给了我无效的例外。
试图调查后者并没有多大帮助,因为我找不到任何帮助信息,或者我只是不理解任何事情。
package platformer.resources;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
public class ImageLoader
{
static String spritePath = "src/platformer/resources/";
public static BufferedImage loadImage(String path)
{
BufferedImage img = null;
try{img= ImageIO.read(new File(spritePath+path));
}catch(IOException e){System.out.println("Couldn't load File: "+spritePath+path);}
return img;
}
public static BufferedImage flipImage(BufferedImage bufferedImage)
{
AffineTransform tx = AffineTransform.getScaleInstance(-1, 1);
tx.translate(-bufferedImage.getWidth(null), 0);
AffineTransformOp op = new AffineTransformOp(tx,
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
bufferedImage = op.filter(bufferedImage, null);
return bufferedImage;
}
}
这是我到目前为止使用的代码。 其他类将使用" loadImage"或" flipImage"并且在IDE中它工作正常,但作为.jar,它无法找到.png。
例如class" platformer / entities / walker.class"会尝试打开" Idle.png"。为了做到这一点,它使用" loadImage(" /entities/enemy/walker/Idle.png")"方法。请注意,在该方法中,实际路径最终将成为" src / platformer / resources / entities / enemy / walker / Idle.png"。
我再次非常抱歉,如果已经回答了这个问题,我仍然感谢你的帮助。
迈克尔
答案 0 :(得分:0)
当您的文件位于jar中时,它们只能作为资源流取出,因此您需要使用以下内容:
ImageLoader.class.getResourceAsStream("nameoffile").
这是因为jar实际上是一个压缩的目录结构,而文件实际上不是文件,它们在压缩的zip格式中被隐藏为二进制文件。