我有一個程序以不同的時間間隔執行事件。每個事件都被分配了一個EVENTTIME這樣的:繼續解除序列化後停止的程序
public abstract class Event implements Serializable{
private long eventTime;
protected final long delayTime;
public Event(long delayTime) {
this.delayTime = delayTime;
System.out.println(this.delayTime);
start();
}
public void start() { // Allows restarting
eventTime = System.currentTimeMillis() + delayTime;
}
public boolean ready() {
return System.currentTimeMillis() >= eventTime;
}
public abstract void action() throws ControllerException;
}
我使用ArrayList舉行的活動和一個for循環啓動事件。如果再發生特殊事件的程序正在使用的序列化保存,然後終止:
public abstract class Controller implements Serializable{
private List<Event> eventList = new ArrayList<Event>();
public void addEvent(Event c) {
eventList.add(c);
}
public abstract void saveState();
public abstract void shutdown();
public void run() {
while(eventList.size() > 0)
for(Event e : new ArrayList<Event>(eventList))
if(e.ready()) {
System.out.println(e);
try {
e.action();
}
catch(ControllerException ex) {
System.err.println("Reason: " + ex + "\n");
System.out.println("State has been saved");
System.out.println(ex.getErrorcode());
eventList.remove(e);
System.out.println(eventList);
saveState();
shutdown();
}
eventList.remove(e);
}
}
}
當我反序列化類和恢復程序,被留在ArrayList中的任何事件來執行,但他們立即執行,因爲他們的準備()要求已經滿足。
如何更改已保存在序列化類中的舊System.currentTimeMillis(),以便在稍後恢復該程序時它將更新到新的System.currentTimeMillis()?