Итак, я работаю над программой, которая позволяет импортировать анимации в форме файлов 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 () должен фактически возвращать ноль.Я подтвердил это, распечатав его, прежде чем вернуть.