-1

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);
}
Rof
  • 53
  • 1
  • 5
  • 3
    Your stack trace is missing the first line, which is pretty important... – Jon Skeet Mar 01 '16 at 18:02
  • 1
    You posted everything except the most important part: the first line of the stack trace, telling what the exception is. Quite easy to guess in this case (NotSerializableException), but please post that information next time. And read it. If you had read it, and then read the javadoc of NotSerializableException, you would have had your answer. – JB Nizet Mar 01 '16 at 18:05

1 Answers1

2

Implement the Serializable interface

public class GroupManager implements Serializable {
Reimeus
  • 158,255
  • 15
  • 216
  • 276