gpt4 book ai didi

Java 函数在前一个函数结束之前执行

转载 作者:行者123 更新时间:2023-12-02 03:32:32 24 4
gpt4 key购买 nike

我正在尝试创建一个加载了 gson 的自定义对象的 ArrayList,以便稍后从中获取信息,但似乎 Java 在第一个函数返回任何内容之前正在执行其他函数,并且导致了 NullPointerException。

这似乎总是发生在第一个对象被 gson 加载之后。

主类:

package com.azias.awbe.tests;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import com.azias.awbe.Utils;
import com.azias.awbe.mod.ModInfo;
import com.azias.awbe.mod.ModLoader;
import com.google.gson.Gson;

public class ModLoadingTest {

public static void main(String[] args) {
ArrayList<ModInfo> availableMods = loadModsList();

String[] modIds = args[0].split(";");
ModInfo[] modsToLoad = new ModInfo[modIds.length];

for(int i=0; i<modIds.length; i++) {
for(ModInfo mod : availableMods) {
if(mod.getId().equals(modIds[i])) { //This is the line 26.
modsToLoad[i] = mod;
}
}
}

ModLoader modLoader = new ModLoader(modsToLoad);

modLoader.loadModCode();
}

public static ArrayList<ModInfo> loadModsList() {
ArrayList<ModInfo> mods = new ArrayList<ModInfo>();
ArrayList<File> folders = Utils.listFolders("./assets");

for(File folder: folders) {
File modInfoFile = new File(folder.getAbsolutePath()+"/modinfo.json");
if(modInfoFile.isFile()) {
try {
String json = Utils.fileToString(modInfoFile.getAbsolutePath());
ModInfo mod = new Gson().fromJson(json, ModInfo.class);
mods.add(mod);
} catch (IOException e) {
System.err.println("Unable to load the \"modInfo.json\" file in \""+folder.getName()+"\"");
e.printStackTrace();
}
} else {
System.out.println("The folder named \""+folder.getName()+"\" does not countain a modinfo.json file.");
}
}

return mods;
}
}

实用程序类:

package com.azias.awbe;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Utils {

/**
* List all the folder under a directory
* @param directoryName to be listed
*/
public static ArrayList<File> listFolders(String directoryName) {
ArrayList<File> files = new ArrayList<File>();
File directory = new File(directoryName);
File[] fList = directory.listFiles();
for(File file : fList) {
if (file.isDirectory()) {
files.add(file);
}
}
return files;
}

public static String fileToString(String path) throws IOException {
return new String(Files.readAllBytes(Paths.get(path)), StandardCharsets.UTF_8);
}
}

控制台日志:

The folder named "customMaps" does not countain a modinfo.json file.
Exception in thread "main"
The folder named "launcher" does not countain a modinfo.json file.
The folder named "modtest" does not countain a modinfo.json file.
java.lang.NullPointerException at com.azias.awbe.tests.ModLoadingTest.main(ModLoadingTest.java:26)

线程“main”中的异常并不总是出现。

最佳答案

阅读评论,似乎有一个拼写错误导致了错误。不过,我仍然会解决时间问题。

<小时/>

明显的时序不匹配是由于输出流的工作方式造成的:异常堆栈跟踪打印到 System.err ,但您将错误消息打印到 System.out 。当您的 IDE 显示程序输出时,有时一个流比另一个流慢一些,并且顺序会困惑。

要解决此问题,请尝试通过 System.err 打印所有错误消息。在单个流中,消息永远不会像这样重新排序。

关于Java 函数在前一个函数结束之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37887710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com