0
我正在製作一個java程序作爲對自己學習的挑戰,而我目前在序列化和反序列化ArrayList時遇到了麻煩。當我反序列化所有的值爲空。反序列化數組列表時,Java所有值都爲null
這是最初連載列表功能:
private void saveModList(ArrayList<Moderator> m) {
try {
ObjectOutputStream fOut = new ObjectOutputStream(new FileOutputStream("data/modlist.ctm"));
fOut.writeObject(m);
fOut.close();
} catch(IOException ex) {
JOptionPane.showMessageDialog(null, "Could not save moderator list.",
"Save error", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
}
這是反序列化列表的功能:
public static ArrayList<Moderator> openModList() {
try {
ObjectInputStream fIn = new ObjectInputStream(new FileInputStream("data/modlist.ctm"));
try {
return (ArrayList<Moderator>) fIn.readObject();
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Could not open moderator list",
"Read error", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
fIn.close();
} catch(FileNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Could not load moderator data. File not found.",
"Moderator file not found.", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
} catch(EOFException ex) {
} catch(IOException ex) {
JOptionPane.showMessageDialog(null, "Could not load moderator data.",
"Error", JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
}
//If something screws up, return null, and the user will not be logged in
return null;
}
而這個調用函數來反序列化
ArrayList<Moderator> modLoginList = new ArrayList<Moderator>();
modLoginList = Main.openModList();
//Check all of the moderators.
//If one of them matches up to a moderator username and password, log them in
for(int i = 0; i < modLoginList.size(); i++) {
if(modLoginList.get(i).name.equals(username) && modLoginList.get(i).password.equals(password)) {
loggedIn = true;
break;
}
}
當我這樣做時,我也在if語句中得到一個NullPointerException,檢查是否th主持人的憑證是有效的。當我去嘗試打印出值時,它們是空的。主持人類確實實現了可序列化並具有序列版本ID。任何建議,爲什麼發生這種情況,以及如何解決它/更好的方式來做到這一點非常感謝。
此外,它不僅僅是完全返回null,因爲沒有什麼可讀的,或出了什麼問題。
你在哪裏/如何調用'saveModList(...)'以及你傳遞給它的內容?我強烈懷疑它實際上是保存了一個空值列表。 –
爲什麼要創建'new ArrayList',然後立即替換它? – chrylis
你可以發佈調用'saveModList()'的代碼嗎? – initramfs