java - 为什么 NetBeans 8.1 可以直接在编辑器中运行项目,但是当我将其编译成 jar 时,却出现错误

标签 java netbeans 2d-games

我正在使用 NetBeans 在 Java 中制作游戏,当我在 NetBeans 中运行它时,我会显示一个图像,因为这是预期的行为。然而,当我将项目编译成 jar 文件并运行它时,如果在终端中运行,我会看到白屏和堆栈跟踪。这是 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 8.1 可以直接在编辑器中运行项目,但是当我将其编译成 jar 时,却出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50811851/

相关文章:

java - <ProjectName.ProjectUI 作为我的 Netbeans java OS X 应用程序的名称很糟糕

java - 在二维数组中移动的最佳方式(棋盘游戏)

java - 为什么这个基于数组的 Java 游戏不起作用?

Java 对某些对象使用相同的引用,但有时它会创建 2 个实例

java - 使用 Java 将命令发送到 gsm 调制解调器

netbeans - 使用NetBeans 7.2生成UML图

java - 可运行 jar 文件中的 RXTX - 为什么它不起作用?

java - Java 是否有支持并发修改的数据结构?

java - 如何关闭登录请求窗口?

javascript - 为什么我的 Sprite 不会出现在我的背景之上?