我的代码中有两个数组列表。一个存储User对象,另一个存储Team对象。我试图做的是什么时候关闭指令给两个数组列表保存到文件,然后关闭程序。自定义对象序列化的Arraylist
我在保存两个AL的过程中遇到了问题,但后来我定义了一个serialVersionUID,只有User AL us正常工作。我仍然从AL队得到一个错误。
保存时出错:
14:29:46 [SEVERE] java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.bukkit.Location
14:29:46 [SEVERE] at java.io.ObjectInputStream.readObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readObject(Unknown Source)
14:29:46 [SEVERE] at java.util.ArrayList.readObject(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at java.lang.reflect.Method.invoke(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectInputStream.readObject(Unknown Source)
14:29:46 [SEVERE] at plugin.Configs.loadTeams(Configs.java:129)
14:29:46 [SEVERE] at plugin.UltimateSurvival.onEnable(UltimateSurvival.java:82)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugin(CraftServer.java:284)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.enablePlugins(CraftServer.java:266)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.reload(CraftServer.java:615)
14:29:46 [SEVERE] at org.bukkit.Bukkit.reload(Bukkit.java:277)
14:29:46 [SEVERE] at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23)
14:29:46 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServer.java:528)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerConnection.java:968)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.java:886)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:837)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.Packet3Chat.handle(SourceFile:49)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:116)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:30)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:592)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
14:29:46 [SEVERE] Caused by: java.io.NotSerializableException: org.bukkit.Location
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject(Unknown Source)
14:29:46 [SEVERE] at java.util.ArrayList.writeObject(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at java.lang.reflect.Method.invoke(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject(Unknown Source)
14:29:46 [SEVERE] at plugin.Configs.saveTeams(Configs.java:52)
14:29:46 [SEVERE] at plugin.UltimateSurvival.onDisable(UltimateSurvival.java:91)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:219)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:481)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:400)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:393)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:434)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.reload(CraftServer.java:585)
14:29:46 [SEVERE] ... 17 more
加载错误:
14:29:46 [SEVERE] java.io.NotSerializableException: org.bukkit.Location
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject(Unknown Source)
14:29:46 [SEVERE] at java.util.ArrayList.writeObject(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
14:29:46 [SEVERE] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
14:29:46 [SEVERE] at java.lang.reflect.Method.invoke(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject0(Unknown Source)
14:29:46 [SEVERE] at java.io.ObjectOutputStream.writeObject(Unknown Source)
14:29:46 [SEVERE] at plugin.Configs.saveTeams(Configs.java:52)
14:29:46 [SEVERE] at plugin.UltimateSurvival.onDisable(UltimateSurvival.java:91)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:219)
14:29:46 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:481)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:400)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:393)
14:29:46 [SEVERE] at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:434)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.reload(CraftServer.java:585)
14:29:46 [SEVERE] at org.bukkit.Bukkit.reload(Bukkit.java:277)
14:29:46 [SEVERE] at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23)
14:29:46 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)
14:29:46 [SEVERE] at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServer.java:528)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerConnection.java:96
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.java:886)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:837)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.Packet3Chat.handle(SourceFile:49)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:116)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:30)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:592)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
14:29:46 [SEVERE] at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
这是我的世界插件,我目前正在开发的一部分。 一些代码:
public class Team implements Serializable
{
private static final long serialVersionUID = 6482400621090209853L;
private String name = "";
private int points = 0;
private int size = 0;
private Location spawn = null;
}
public void loadTeams()
{
try{
FileInputStream file = new FileInputStream ("plugins/UltimateSurvival/teams.bin");
ObjectInputStream ois = new ObjectInputStream(file);
UltimateSurvival.teams = (ArrayList<Team>)ois.readObject();
file.close();
}catch(Exception e){
e.printStackTrace();
}
}
public void saveTeams()
{
try
{
FileOutputStream file = new FileOutputStream ("plugins/UltimateSurvival/teams.bin");
ObjectOutputStream oos = new ObjectOutputStream(file);
oos.writeObject(UltimateSurvival.teams);
file.close();
}
catch(Exception e)
{
e.printStackTrace();
}
我读了一些关于序列化,但它是我对它的第一次接触。难道我做错了什么?
在此先感谢
你什么错误?复制并粘贴完整的堆栈跟踪,而不是发送链接到屏幕截图。 –
'Location'不可序列化,这就是它所说的。使它可序列化,它从'Team'对象被引用 – hoaz
我是个白痴,没有注意到它......但是有一个问题,这个'Location'不是由我创建的,它属于bukkit库。有没有办法让它可序列化? –