Ich habe folgende classe geschreiben, das Problem sie funktioniert aus unbekannten Grunde nicht
Java:
package de.empirephoenix.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
public class TimedInvocation {
public static Vector<Timedmethodinvocation> timedobjects = new Vector<Timedmethodinvocation>();
public static void Update(){ // wird garantert aufgerufen
long curtime = System.currentTimeMillis();
System.out.println(timedobjects.size());//liefert 0 zurück obwohl angeblich das element dem vector hinzugefügt wurde (-> weiter unten)
Iterator<Timedmethodinvocation> iter = timedobjects.listIterator();
while(iter.hasNext()){
System.out.println("checking"); //erscheint nie auf der console
Timedmethodinvocation current = iter.next();
current.Update(curtime);
if(current.isFinished ){iter.remove();}
}
}
public static void Add(Object toexecute,Method method,int milisdelay){
Add(toexecute, method, milisdelay,null);
}
public static void Add(Object toexecute,Method method,int milisdelay,Object argument){
timedobjects.add(new Timedmethodinvocation(toexecute,method,milisdelay,argument)); // returnt true, also ist das object dem vector hinzugefügt
}
}
class Timedmethodinvocation{
public boolean isFinished = false;
private final Object objecttouse;
private final Method toinvoke;
private final long timetoexecute;
private final Object argument;
Timedmethodinvocation(Object toexecute, Method method, int milisdelay,Object argument){
objecttouse = toexecute;
toinvoke = method;
timetoexecute = milisdelay + System.currentTimeMillis();
this.argument = argument;
}
void Update(long curtime){
System.out.println("updating"); //wird nie aufgerufen
if(curtime <= timetoexecute){
try {
toinvoke.invoke(objecttouse, argument);
} catch (Exception e) {e.printStackTrace();}
isFinished = true;
}
}
}
[/Java]
Bin hier echt gerade am verzweifeln, und auch wenn ich befürchte das das wieder einer dieser ganz dummen Fehler ist, kann ich ihn leider nicht finden.