简体   繁体   中英

ObjectInput and OutputStream error when writing in to a file

So i am programming a plugin for Minecraft Spigot but i get an Java error so that's why I'm not posting it on a minecraft plugins forum, but anyway I'm trying to save a class called GroupManager into a File (With a class called ObjectData) And after that i want to read it again, here's my error message:

[18:43:38 WARN]:        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
[18:43:38 WARN]:        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
[18:43:38 WARN]:        at playerapi.cubenex.ObjectData.write(ObjectData.java:27)
[18:43:38 WARN]:        at playerapi.cubenex.GroupManager.save(GroupManager.java:70)
[18:43:38 WARN]:        at playerapi.cubenex.ThePlugin.onDisable(ThePlugin.java:70)
[18:43:38 WARN]:        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:323)
[18:43:38 WARN]:        at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:364)
[18:43:38 WARN]:        at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424)
[18:43:38 WARN]:        at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417)
[18:43:38 WARN]:        at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:458)
[18:43:38 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:708)
[18:43:38 WARN]:        at org.bukkit.Bukkit.reload(Bukkit.java:535)
[18:43:38 WARN]:        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25)
[18:43:38 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[18:43:38 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13)
[18:43:38 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[18:43:38 WARN]:        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654)
[18:43:38 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557)

Here's the method when i save

public void save(){
    data.write(this);
}

and when i read

public static GroupManager getGroupManager(Plugin plugin){
    DataFile file = new DataFile("groups.dot", plugin);
    if (!file.exists()) return new GroupManager(plugin);
    ObjectData data = new ObjectData(file);
    return (GroupManager) data.read();
}

the GroupManager class. And here's the method for saving(/writing)

public void write(Object obj){
    file.delete();
    try {
        file.create();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(obj);
        oos.flush();
        fos.close();
        oos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

and when i read

public Object read(){
    try {
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object obj = ois.readObject();
        fis.close();
        ois.close();
        return obj;
    } catch (IOException | ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

(Those are all the methods from ObjectData class) And if you need the GroupManager class here it is:

public class GroupManager {

ObjectData data;

private ArrayList<Group> groups;
private HashMap<Player, Group> players;

public GroupManager(Plugin plugin){
    data = new ObjectData(new DataFile("groups.dot", plugin));
    groups = new ArrayList<Group>();
}

public void add(Player p, Group g){
    players.put(p, g);
    if (p.isOnline()) g.addPlayer(p);
}

public void Joined(Player p){
    players.get(p).addBackPlayer(p);
}

public Group getGroup(Player p){
    return players.get(p);
}

public void registerGroup(Group group){
    groups.add(group);
}

public void deleteGroup(Group group){
    groups.remove(group);
}

public boolean containsGroup(Group group){
    return groups.contains(group);
}

public boolean containsGroup(String name){
    boolean r = false;
    for (int i = 0; i < groups.size(); i++){
        if (groups.get(i).getGroupName().equalsIgnoreCase(name)) r = true;
    }
    return r;
}

public Group getGroup(String name){
    Group r = null;
    for (int i = 0; i < groups.size(); i++){
        if (groups.get(i).getGroupName().equalsIgnoreCase(name)) r = groups.get(i);
    }
    return r;
}

public static GroupManager getGroupManager(Plugin plugin){
    DataFile file = new DataFile("groups.dot", plugin);
    if (!file.exists()) return new GroupManager(plugin);
    ObjectData data = new ObjectData(file);
    return (GroupManager) data.read();
}

public void save(){
    data.write(this);
}

实现Serializable接口

public class GroupManager implements Serializable {

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM