I wrote a class that works in conjunction with serializing objects. There seems to be an exception at the serialization stage. I could not find anything about this exception. I also failed to find the inner class with the alias Node in the HashMap.
[04/01/15 2:33 PM]: java.io.NotSerializableException: java.util.HashMap$Node
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
[04/01/15 2:33 PM]: at java.util.ArrayList.writeObject(ArrayList.java:762)
[04/01/15 2:33 PM]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[04/01/15 2:33 PM]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[04/01/15 2:33 PM]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[04/01/15 2:33 PM]: at java.lang.reflect.Method.invoke(Method.java:483)
[04/01/15 2:33 PM]: at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
[04/01/15 2:33 PM]: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
[04/01/15 2:33 PM]: at ab.server.data.ServerData.saveField(ServerData.java:157)
[04/01/15 2:33 PM]: at ab.server.data.ServerData.processQueue(ServerData.java:195)
[04/01/15 2:33 PM]: at ab.Server.lambda$0(Server.java:260)
[04/01/15 2:33 PM]: at ab.Server$$Lambda$15/2011997442.run(Unknown Source)
[04/01/15 2:33 PM]: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[04/01/15 2:33 PM]: at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
[04/01/15 2:33 PM]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
[04/01/15 2:33 PM]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
[04/01/15 2:33 PM]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[04/01/15 2:33 PM]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[04/01/15 2:33 PM]: at java.lang.Thread.run(Thread.java:745)
This is a class that is serializable.
public class WellOfGoodWill implements Serializable {
private static final long serialVersionUID = -3335621107999346623L;
private static final int MAXIMUM_WINNERS = 3;
private static final Comparator<Entry<String, Integer>> HIGHEST_VALUE = Entry.comparingByValue();
private HashMap<String, Integer> entries = new HashMap<>();
private Collection<Entry<String, Integer>> winners;
private Date date = Misc.getFutureDate(2014, Calendar.DECEMBER, 28, 18, 0, 0);
public void update(String player, Integer amount) {
if (!entries.containsKey(player)) {
entries.put(player, amount);
} else {
int oldValue = entries.get(player);
entries.replace(player, oldValue, oldValue + amount);
}
Server.getServerData().setWellOfGoodWill(this);
}
public void clear() {
entries.clear();
}
public Collection<Entry<String, Integer>> getSortedResults() {
List<Entry<String, Integer>> list = new ArrayList<>(entries.entrySet());
list.sort(HIGHEST_VALUE);
Collections.reverse(list);
return new ArrayList<>(list.subList(0, list.size() < MAXIMUM_WINNERS ? list.size() : MAXIMUM_WINNERS));
}
public Map<String, Integer> getEntries() {
return entries;
}
public Collection<Entry<String, Integer>> getWinners() {
return winners;
}
public void setWinners(Collection<Entry<String, Integer>> winners) {
this.winners = winners;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
source
share