Timer class macht einfach garnichts :/

Empire Phoenix

Top Contributor
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.
 

eRaaaa

Top Contributor
das Problem sie funktioniert aus unbekannten Grunde nicht

Und magst du uns auch verraten wie du das testest?

Java:
    public static void main(String[] args){
	TimedInvocation.Add("lala", null, 1000);
	TimedInvocation.Update();
    }

liefert mir zumindestens
Code:
1
checking
updating
und es folgt eine NPE (wahrscheinlich klar, weil ich ja null übergebe)....aber an sich kann ich deine Kommentare nicht nachvollziehen !
 

Empire Phoenix

Top Contributor
Für einen burst shoot:

Java:
//in der klasse SPlayer
TimedInvocation.Add(this,SPlayer.class.getMethod("Shoot"),10);
TimedInvocation.Add(this,SPlayer.class.getMethod("Shoot"),40);
TimedInvocation.Add(this,SPlayer.class.getMethod("Shoot"),80);
TimedInvocation.Add(this,SPlayer.class.getMethod("Shoot"),100);
TimedInvocation.Add(this,SPlayer.class.getMethod("Shoot"),120);

Die NPE kommt weil du ihm ja nicht sagst welche Methode aufgerufen werden soll



Und das meine Kommentare eigentlich keinen Sinn gebe ist mir klar, aber ich habe nur beschrieben wie sich das Fragment bei mir verhält(und da ich es nicht vestehe diesen Post erstellt)
 

eRaaaa

Top Contributor
Sorry ich kann dir leider immernoch nicht ganz folgen, bei mir klappt das wunderbar ! (bei dir fehlt noch der Aufruf von Update())

Weiterhin könnte das Problem darin liegen, dass du anscheinend eine Methode aufrufen möchtest, welche keinen Paramter hat..du rufst aber immer die invoke-Methode MIT Paramter (null) auf...Das geht schief.

In der void Update(long curtime) :
Java:
		if (this.argument != null)
		    toinvoke.invoke(objecttouse, argument);
		else
		   toinvoke.invoke(objecttouse);

So gibts bei mir keine Probleme (bzw du hast uns immernoch nicht gesagt, was eig. dein Problem ist :D ), habs getestet mit einer meiner Klassen.
 

Empire Phoenix

Top Contributor
das Problem scheint zu sein das der vector das element nicht added, obwohl die add funktion true returnt ?!?

Hier ein kleines Testcase was das problem veranschaulicht: (achtung an der timedinvocation habe ich noch eine kleinigkeit geändert,a ber das problem ist immernoch dasselbe)

Java:
public class Test {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Test test = new Test();
		TimedInvocation.Add(test,"bla",0);
		
		while(true){
			TimedInvocation.Update();
		}
	}
	
	
	public void bla(){
		System.out.println("bla");
	}
}

Java:
package de.empirephoenix.util;

import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Vector;

public class TimedInvocation {
	public static Vector<Timedmethodinvocation> timedobjects = new Vector<Timedmethodinvocation>();
	
	public static void Update(){
		long curtime = System.currentTimeMillis();
		Iterator<Timedmethodinvocation> iter = timedobjects.listIterator();
		System.out.println(timedobjects.size());
		while(iter.hasNext()){
			System.out.println("checking");
			Timedmethodinvocation current = iter.next();
			current.Update(curtime);
			if(current.isFinished ){iter.remove();}
		}
	}
	
	public static void Add(Object toexecute,String methodname,int milisdelay){
		Add(toexecute, methodname, milisdelay,null);
	}
	
	public static void Add(Object toexecute,String methodname,int milisdelay,Object argument){
		try {
			timedobjects.add(new Timedmethodinvocation(toexecute,methodname,milisdelay,argument));
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
	}
	
}

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, String methodname, int milisdelay,Object argument) throws SecurityException, NoSuchMethodException{
		objecttouse = toexecute;
		if(argument != null){
			toinvoke = toexecute.getClass().getMethod(methodname,argument.getClass());
		}else{
			toinvoke = toexecute.getClass().getMethod(methodname);
		}
		
		timetoexecute = milisdelay + System.currentTimeMillis();
		this.argument = argument;
	}
	
	void Update(long curtime){
		System.out.println("updating");
		if(curtime <= timetoexecute){
			try {
				if(argument != null){
					toinvoke.invoke(objecttouse, argument);
				}else{
					toinvoke.invoke(objecttouse);
				}
			} catch (Exception e) {e.printStackTrace();}
			isFinished = true;
		}
	}
}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Sorry, aber ich weiß echt nicht mehr was ich schreiben soll :) Bei mir funktioniert dein Code ohne Probleme ! (ausser dass die Methode zeitverzögert ausgeführt wird --> wird sofort ausgeführt))...aber die Probleme die du schilderst, kann ich im besten Willen nicht nachvollziehen.
Willst du nicht mal deine Player-Klasse + die Klasse posten, in der du deine TimedInvocation.add und update aufrufst?

Anders denk ich kommen wir hier nicht weiter, wenn du jedes mal nur sagst, geht nicht: ich daraufhin sage: es geht :D

/edit: Ausführung deines Codes: (ohne die while-Schleife ?!)
Code:
1
checking
updating
bla

???:L???:L???:L
 
Zuletzt bearbeitet:

Empire Phoenix

Top Contributor
Ok hm jetzt willes...
was lernen wir daraus, eclipse bei seltsamen fehlern einfach mal neustarten ....

umse getimt zu haben eifnach das < umdrehen inner update der timedinvocation
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Timer terminiert nicht Allgemeine Java-Themen 5
W Timer Konzept-Frage Allgemeine Java-Themen 16
Z Timer Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
Tacofan Kurzer Timer Allgemeine Java-Themen 22
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
wolfgang63 Best Practice Taktgeber oder Timer mit variablem Intervall Allgemeine Java-Themen 1
I Timer Allgemeine Java-Themen 1
X Timer Allgemeine Java-Themen 3
C Timer? Allgemeine Java-Themen 8
U Timer - Timertask endet nicht Allgemeine Java-Themen 4
X timer.schedule - Allgemeine Java-Themen 7
D Simpler Timer zum warten Allgemeine Java-Themen 19
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
G Threads Timer wird unterbrochen Allgemeine Java-Themen 20
P Java Timer Allgemeine Java-Themen 3
K Timer Thread Allgemeine Java-Themen 8
E Wie Timer anbringen mit Designer in Netbeans Allgemeine Java-Themen 5
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
O Timer pausieren Allgemeine Java-Themen 5
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
B util.Timer zu langsam? Allgemeine Java-Themen 3
P Java Timer Allgemeine Java-Themen 2
S Timer in Applet? Allgemeine Java-Themen 11
G Swing Timer führt Methode nicht aus Allgemeine Java-Themen 2
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
T Timer oder Alternative? Allgemeine Java-Themen 3
Z Timer -> Thread jeden Tag ausführen Allgemeine Java-Themen 5
D Probleme mit einem Timer Allgemeine Java-Themen 6
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
S Problem mit einem Timer (Aktualisierung etc.) Allgemeine Java-Themen 2
B Timer übergabe Allgemeine Java-Themen 3
G Timer abbrechen und neu starten Allgemeine Java-Themen 3
G timer mit buttondruck abbrechen Allgemeine Java-Themen 7
T Timer oder ähnliches? Allgemeine Java-Themen 3
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
O Thread als Timer Interrupt Allgemeine Java-Themen 2
C Timer.scheduleAtFixedRate(). Allgemeine Java-Themen 5
H gibts in Java sowas wie in Visual Basic den Timer? Allgemeine Java-Themen 5
B 24 Uhr Timer Task Allgemeine Java-Themen 5
G Timer nur 64 mal pro Sekunde? Allgemeine Java-Themen 18
S Frage zu jTDS, JAVA allgemein und Timer Allgemeine Java-Themen 6
L Problem mit Timer Allgemeine Java-Themen 7
J Timer-Objekt / Task-Zustand ermitteln Allgemeine Java-Themen 5
D NoClassDefFoundError: Could not initialize class Allgemeine Java-Themen 0
J Class to link Java Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
T Java Robot Class - Bot Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
G javafx "class path" exception Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
K Wildcard und class type Allgemeine Java-Themen 9
M Java model class ? Allgemeine Java-Themen 9
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
R Dynimc Class Loading Allgemeine Java-Themen 5
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
V Eclipse .class Dateien Allgemeine Java-Themen 9
KeexZDeveoper Von .class zu .java Allgemeine Java-Themen 7
N Wo ist Object.class ? Allgemeine Java-Themen 0
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
M *.class Files ausführen Allgemeine Java-Themen 2
L Klassen Nested Class In Nested Class Allgemeine Java-Themen 3
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
I JSoup Class auslesen Allgemeine Java-Themen 1
K Generic class und Reflection Allgemeine Java-Themen 2
R .class Datei in .jar austauschen Allgemeine Java-Themen 2
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
A main-class Not found Allgemeine Java-Themen 3
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
B public class JarFilter extends FileFilter « Falsch? Allgemeine Java-Themen 4
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
Phash Can't find Main Class Allgemeine Java-Themen 4
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
B json zu java class Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
L Class Files , Methode .delete() Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben