我正在用 Java 制作一个游戏,我想将随机生成的地图保存在图像上,然后加载它。我的代码在 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 视为目录结构,但事实并非如此。你甚至不应该think写入运行代码的 jar 文件(这是可能的,但涉及many陷阱)。
假设您的目录结构如下所示:
MyProgram
MyProgram.jar
而MyProgram是工作目录,你看没有res目录。您在 Eclipse 的源代码树中创建的“res”目录是inside罐子。您无法使用文件 API 访问它,也肯定无法向其中写入任何内容。
我不清楚代码显示其背后的目的是什么;如果您每次运行程序时都创建文件,并且仅在该运行中使用它,那么我根本不会保存它。只需返回您创建的 BuffereImage 并直接在需要的地方使用它即可。
如果想法是在first运行并简单地在后续运行中加载它,您需要指定一个您可以确定存在并且可以使用您的程序权限写入的位置。您可以尝试将其直接写入程序文件夹(或在那里创建另一个“res”文件夹),但是可能不可写取决于您的程序在哪个用户下运行。您通常会在程序安装期间设置适当的结构和权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)