World Loader 不会将world1.txt加载为 String [duplicate]

World Loader wont load world1.txt as an String [duplicate]

提问人:Gandalf1783 提问时间:4/19/2019 最后编辑:Gandalf1783 更新时间:4/19/2019 访问量:40

问:

我的 Java 游戏有问题。当我想导出它时,它不会加载世界。我会得到一个“线程 - 0”异常。这是我的功能:

    private void loadWorld(String path){
    String file = World.class.getResourceAsStream(path).toString();
    file.toString();
    String[] tokens = file.split("\\s+");
    width = Utils.parseInt(tokens[0]);
    height = Utils.parseInt(tokens[1]);
    spawnX = Utils.parseInt(tokens[2]);
    spawnY = Utils.parseInt(tokens[3]);

    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) + 4]);
        }
    }
}

它需要作为 String 加载,因为我需要将每个 String 从中拆分为一个 Array。管理这个问题的正确方法是什么?

编辑:这是堆栈跟踪:

C:\Users\User>java -jar C:\Users\User\Desktop\Game.jar
Exception in thread "Thread-0" java.lang.NullPointerException
    at dev.codenmore.tilegame.worlds.World.loadWorld(World.java:76)
    at dev.codenmore.tilegame.worlds.World.<init>(World.java:36)
    at dev.codenmore.tilegame.states.GameState.<init>(GameState.java:14)
    at dev.codenmore.tilegame.Game.init(Game.java:61)
    at dev.codenmore.tilegame.Game.run(Game.java:94)
    at java.lang.Thread.run(Unknown Source)
Java 拆分 文本文件 线程异常

评论

0赞 JB Nizet 4/19/2019
所有异常都带有一个类型、一条消息和一个堆栈跟踪,允许知道它们被抛出的原因和位置。如果你不读它,不让我们读它,你就是在搬起石头砸自己的脚。
0赞 JB Nizet 4/19/2019
提示:这是 InputStream.toString() 的 javadoc: docs.oracle.com/javase/7/docs/api/java/lang/...。下面是允许从流中读取字符的类: docs.oracle.com/javase/8/docs/api/java/io/...
0赞 JB Nizet 4/19/2019
下面是关于什么是 NullPointerException 的解释:stackoverflow.com/questions/218384/...
0赞 Gandalf1783 4/19/2019
我添加了堆栈跟踪。错误在线 getResourceAsStream(path) 你知道该怎么做吗?任何内容都不应为 Null...。
0赞 Melvin 4/19/2019
最明显的是,该路径无效。尝试 sout 它,并确保检查路径是否存在......

答:

0赞 Gandalf1783 4/19/2019 #1

我成功了!我使用以下代码来读取文件: InputStream 流 = World.class.getResourceAsStream(“/worlds/world1.txt”); 也许是越野车,但至少它有效!

评论

0赞 4/19/2019
伟大。现在,您需要从 Stream 中读取并从文件中获取文本。
0赞 Gandalf1783 4/19/2019
@Benson99 Stream 一直在工作,但它没有找到资源。那是因为它没有用。我只需要找到正确的方法来加载它。但无论如何,感谢您的帮助:D明天我会把我的答案打勾作为解决方案;)
0赞 Max Alexander Hanna 4/19/2019 #2

始终从调试器开始,我的朋友。我会弹出调试器以查看此处放置的路径 World.class.getResourceAsStream(path)

空指针异常会告诉您,您正在向函数传递一个它无法处理的空值。在调用堆栈的下方,您有

at dev.codenmore.tilegame.worlds.World.loadWorld(World.java:76)

它基本上告诉您 nullPointerException 发生的位置。您的错误堆栈跟踪是这里问题的死赠品。

祝你的项目好运