0

嗨,我一直在尝试从我的 SRC 文件夹中访问图像文件,以便我可以直接从 jar 中运行它。不幸的是它没有加载它们我可以请一些帮助。它是一个空指针异常,无法读取输入文件。这是文件夹的位置以及我在代码中输入的内容。代码:“/sprites/mapsheet2.png” 目录:C:\Users\Lucas\workspace\Vigilante\src\sprites\mapsheet2.png 如果需要任何额外信息,请告诉我并发送。

4

3 回答 3

0

您可以尝试将图像作为 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));
                    }
               }
于 2013-07-21T17:56:36.943 回答
0

.jar 文件中的资源可以加载:getClass().getResource() 它返回具有正确路径的 URL

Image icon = ImageIO.read(getClass().getResource("image´s path"));
于 2013-07-21T17:34:59.577 回答
0

您可以在 .jar 存档文件中打包所有必需的资源。并使用

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("res\file.img")

可以使用 imageIO 转换为 Image。

于 2013-07-21T17:37:01.560 回答