gpt4 book ai didi

Java - ImageIO.write 的加载文件在 .jar 中不起作用

转载 作者:行者123 更新时间:2023-12-02 04:58:56 25 4
gpt4 key购买 nike

我正在用 Java 制作游戏,我想将随机生成的 map 保存在图像上,然后加载它。我的代码在 Eclipse 中工作没有问题,但是当我将其导出到 .jar/.exe 文件时,创建文件(“mapf”)时出现问题。谢谢您的回答。

private void makeMap(){

combined = new BufferedImage(maxX*Game.TILESIZE, maxY*Game.TILESIZE+16, BufferedImage.TYPE_INT_ARGB);

//draw tiles
Graphics g2 = combined.getGraphics();

for(int y = 0; y < tiles[1].length; y++){
for(int x = 0; x < tiles.length; x++){
if(tiles[x][y] != 0){
getTile(tiles[x][y]).render(g2, x * Game.TILESIZE, y * Game.TILESIZE);
}
}
}

//Save as new image
try {
File mapf = new File("res/map.png"); //Here's a problem!!
ImageIO.write(combined, "PNG", mapf);
} catch (IOException e) {
e.printStackTrace();
}

ImageLoader loader = new ImageLoader();
Game.map = loader.load("/map.png");
}

堆栈跟踪:

java.io.FileNotFoundException: res\map.png ([translated] System cannot find path)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at com.sedlacek.dor.level.Level.makeMap(Level.java:237)

最佳答案

您似乎认为可以将 jar 视为目录结构,但事实并非如此。您甚至不应该考虑写入运行代码的 jar 文件(这是可能的,但涉及许多陷阱)。

假设您的目录结构如下所示:

MyProgram
MyProgram.jar

而MyProgram是工作目录,你会看到没有res目录。您在 Eclipse 的源代码树中创建的“res”目录位于 jar 的内部。您无法使用文件 API 访问它,并且您当然无法向其中写入任何内容。

我不清楚代码显示其背后的目的是什么;如果您每次运行程序时都创建文件,并且仅在该运行中使用它,那么我根本不会保存它。只需返回您创建的 BuffereImage 并直接在您需要的地方使用它即可。

如果想法是在第一次运行时创建它并在后续运行时简单地加载它,则需要指定一个可以确定存在并且可以使用程序权限写入的位置。您可以尝试将其直接写入程序文件夹(或在其中创建另一个“res”文件夹),但是可能无法写入,具体取决于程序运行的用户。您通常会在程序安装过程中设置适当的结构和权限。

关于Java - ImageIO.write 的加载文件在 .jar 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com