嗨,我一直在尝试从我的 SRC 文件夹中访问图像文件,以便我可以直接从 jar 中运行它。不幸的是它没有加载它们我可以请一些帮助。它是一个空指针异常,无法读取输入文件。这是文件夹的位置以及我在代码中输入的内容。代码:“/sprites/mapsheet2.png” 目录:C:\Users\Lucas\workspace\Vigilante\src\sprites\mapsheet2.png 如果需要任何额外信息,请告诉我并发送。
3 回答
您可以尝试将图像作为 ByteArrayInputStream 加载到 BufferedImage 中。像这样的东西: BufferedImage img = null; 尝试{ BufferedInputStream sc = new BufferedInputStream(ImageLoad.class.getResourceAsStream(file)); ArrayList in = new ArrayList(); 字节 b = 空;while((b = sc.read) != null)in.add(b); 字节[] 字节 = 新字节[in.size()];
for(int i = 0; i < in.size(); i ++)bytes[i] = in.get(i); img = ImageIO.read(new ByteArrayInputStream(bytes)); }catch(异常 e){}
然后根据需要使用图像!唯一的事情是您必须将 sprites/mapsheet2.png 放在与您运行它的类相同的文件夹中。假设你的类是 ImageLoad.java,ImageLoad.java 必须与 sprites/mapsheet2.png 在同一个包中。欧共体:
ImageLoad.java 在 image.load 包中,在 image.load 包中是资源 sprites(A Dir) 和 sprites/mapsheet2.png,对于在该区域加载所需的任何其他图像也是如此。如果你想加载图像并在另一个类中使用它,你可以创建一个包含上述代码的方法,并返回一个缓冲图像。欧共体:
public class ImageLoad {
public static BufferedImage load(String file) throws Exception{
BufferedInputStream sc = new BufferedInputStream(ImageLoad.class.getResourceAsStream(file));
ArrayList<Byte> in = new ArrayList<Byte>();
byte b = null;
while((b = sc.read) != null)in.add(b);
byte[]
bytes = new byte[in.size()];
for(int i = 0; i < in.size(); i ++)bytes[i] = in.get(i);
return ImageIO.read(new ByteArrayInputStream(bytes));
}
}
.jar 文件中的资源可以加载:getClass().getResource()
它返回具有正确路径的 URL
Image icon = ImageIO.read(getClass().getResource("image´s path"));
您可以在 .jar 存档文件中打包所有必需的资源。并使用
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("res\file.img")
可以使用 imageIO 转换为 Image。