为什么 NetBeans 8.1 运行 编辑器中的项目正确,但当我将它编译成 jar 时,我得到错误
Why will NetBeans 8.1 run a project right in the editor, but when I compile it into a jar, I get errors
我在 Java 中使用 NetBeans 制作游戏,当我在 NetBeans 中 运行 它时,我得到一个图像显示,因为这是预期的行为。但是,当我将项目编译成 jar 文件并 运行 时,如果在终端中 运行 ,我会得到一个白屏和堆栈跟踪。这是罐子的堆栈跟踪。
我真的不知道该怎么做,因为我一直在寻找这个问题的答案有一段时间了,但什么也没找到。所有文件的 URL 都是正确的
java.io.FileNotFoundException: res\Worlds\world1.world (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at dev.DualKeys.SIF.utils.Utils.loadFileAsString(Utils.java:13)
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:47)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at dev.DualKeys.SIF.utils.Utils.parseInt(Utils.java:29)
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:49)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-0" java.lang.ArrayIndexOutOfBoundsException: 1
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:50)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
这是来自 dev.DualKeys.SIF.utils.Utils
的 loadFileAsString
public static String loadFileAsString(String path) {
StringBuilder builder = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.readLine()) != null) {
builder.append(line + "\n");
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
并从 dev.DualKeys.SIF.worlds.World
加载世界
private void loadWorld(String path) {
String file = Utils.loadFileAsString(path);
String[] tokens = file.split("\s+");
width = Utils.parseInt(tokens[0]);
height = Utils.parseInt(tokens[1]);
tiles = new int[width][height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
tiles[x][y] = Utils.parseInt(tokens[(x + y * width) + 2]);
}
}
}
我假设最后两个异常是第一个异常的结果:程序找不到文件 res\Worlds\world1.world
。由于该程序使用 FileInputStream
,您不能将文件包含在您的 jar 中。
我在 Java 中使用 NetBeans 制作游戏,当我在 NetBeans 中 运行 它时,我得到一个图像显示,因为这是预期的行为。但是,当我将项目编译成 jar 文件并 运行 时,如果在终端中 运行 ,我会得到一个白屏和堆栈跟踪。这是罐子的堆栈跟踪。 我真的不知道该怎么做,因为我一直在寻找这个问题的答案有一段时间了,但什么也没找到。所有文件的 URL 都是正确的
java.io.FileNotFoundException: res\Worlds\world1.world (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at dev.DualKeys.SIF.utils.Utils.loadFileAsString(Utils.java:13)
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:47)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at dev.DualKeys.SIF.utils.Utils.parseInt(Utils.java:29)
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:49)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-0" java.lang.ArrayIndexOutOfBoundsException: 1
at dev.DualKeys.SIF.worlds.World.loadWorld(World.java:50)
at dev.DualKeys.SIF.worlds.World.<init>(World.java:18)
at dev.DualKeys.SIF.states.GameState.<init>(GameState.java:24)
at dev.DualKeys.SIF.Game.init(Game.java:56)
at dev.DualKeys.SIF.Game.run(Game.java:86)
at java.lang.Thread.run(Unknown Source)
这是来自 dev.DualKeys.SIF.utils.Utils
的 loadFileAsStringpublic static String loadFileAsString(String path) {
StringBuilder builder = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.readLine()) != null) {
builder.append(line + "\n");
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
并从 dev.DualKeys.SIF.worlds.World
加载世界private void loadWorld(String path) {
String file = Utils.loadFileAsString(path);
String[] tokens = file.split("\s+");
width = Utils.parseInt(tokens[0]);
height = Utils.parseInt(tokens[1]);
tiles = new int[width][height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
tiles[x][y] = Utils.parseInt(tokens[(x + y * width) + 2]);
}
}
}
我假设最后两个异常是第一个异常的结果:程序找不到文件 res\Worlds\world1.world
。由于该程序使用 FileInputStream
,您不能将文件包含在您的 jar 中。