Java, казалось бы, случайно, начал падать на FileHandle.class.getResourceAsStream (path); - PullRequest
0 голосов
/ 24 ноября 2018

Итак, я работаю над программой, которая позволяет импортировать анимации в форме файлов JSON в Minecraft, и при работе с совершенно другой частью программы мой код импорта перестал работать.

Я использую Eclipse, и вот как выглядит мой код импорта:

package com.github.sam54123.mc_animation.utils;

import java.io.InputStream;

public class FileHandle 
{
    public static InputStream inputStreamFromFile(String path)
    {
        try
        {
            InputStream inputStream = FileHandle.class.getResourceAsStream(path);
            return inputStream;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return null;

    }
}

новый файл

package com.github.sam54123.mc_animation.utils;

import java.io.File;
import java.io.InputStream;
import java.util.Scanner;

import org.json.JSONObject;

public class JSONUtils 
{
    public static String getJSONStringFromFile(String path)
    {
        // Open file
        Scanner scanner;
        try 
        {
            InputStream in = FileHandle.inputStreamFromFile(path);
            scanner = new Scanner(in);
            // Get JSON as string without spaces or newlines
            String json = scanner.useDelimiter("\\Z").next();

            // Close file
            scanner.close();

            return json;

        }
        catch(Exception e)
        {
            System.out.println(e.getStackTrace());
            return null;
        }


    }

    public static JSONObject getJSONObjectFromFile(String path)
    {
        File file = new File(path);
        if (!file.exists())
        {
            System.out.println("Invalid Path");
            return null;
        }

        String string = getJSONStringFromFile(path);
        return new JSONObject(string);

    }



}

И я продолжаю делать еще несколькоНеобычное баловство файла позже.Раньше это работало надежно, пока я не сделал это в совершенно другом и не связанном с ним классе:

String command = getCommand(object);

if (command != null && command.length() > 0)
{
    commands.add(new AnimCommand(command, i));
}

И затем он начал выдавать эту ошибку:

   [Ljava.lang.StackTraceElement;@7852e922
Exception in thread "main" java.lang.NullPointerException
    at java.io.StringReader.<init>(Unknown Source)
    at org.json.JSONTokener.<init>(JSONTokener.java:94)
    at org.json.JSONObject.<init>(JSONObject.java:406)
    at com.github.sam54123.mc_animation.utils.JSONUtils.getJSONObjectFromFile(JSONUtils.java:47)
    at com.github.sam54123.mc_animation.system.Animation.<init>(Animation.java:20)
    at com.github.sam54123.mc_animation.testing.Tester.main(Tester.java:13)

У меня есть двойнойпроверил, что файл не изменился, и я попытался удалить этот раздел кода, перезапустить Eclipse, всю сделку, и, кажется, ничто не может исправить это.Код даже может распознать, что файл действителен с использованием класса File, но, похоже, ничего не меняется.Кто-нибудь знает, как это можно исправить?Вот остальная часть моего кода: https://github.com/Sam54123/mc-animation/

РЕДАКТИРОВАТЬ

Хорошо, я только что сделал еще несколько отладок, и похоже, что это

return new JSONObject(string);

в строке 47 второго файла, который вылетает.Понятия не имею почему, так как рискованное чтение файла с диска в порядке.

РЕДАКТИРОВАНИЕ 2 Похоже, что это сбой, потому что

InputStream in = FileHandle.inputStreamFromFile(path);

возвращает нольЭто имеет смысл из-за оператора try catch

InputStream inputStream = FileHandle.class.getResourceAsStream(path);

. Почему это не получается, я бьюсь, потому что валидность файла проверяется в другом месте кода.Он также работал, и я ничего не изменил в расположении файлов.

РЕДАКТИРОВАТЬ 3 Интересно, что пара System.out.printlns показывает, что улов на самом деле не получаетсяактивирован, и, следовательно, getResourceAsStream () должен фактически возвращать ноль.Я подтвердил это, распечатав его, прежде чем вернуть.

...