Reflection + abbruch ohne informationen

lumo

Top Contributor
Hallo

es scheint nicht meine woche zu sein.
gestern hab ich code geschrieben, der auch funktionierte.
heute beim einschalten des rechners funktioniert nichts mehr.

habe eine funktion implementiert, die mir alle set-funktionen mit standardwerten füllt (somit fülle ich ein von mir erstelltes objekt mit standardwerten sozusagen ein dummy-objekt)

Java:
static void invokeAll(Object obj) {
		System.out.println("invokeAll started.");
		Class<?>[] classes = { String.class, Integer.class, Double.class,
				Boolean.class, Set.class, Calendar.class };
		Object[] values = { "String", Integer.valueOf(0), Double.valueOf(0.0),
				Boolean.valueOf(false), new HashSet<String>(),
				Calendar.getInstance().clone() };
		// TODO: nullvalues weg, realvalues verwenden.
		Map<Class<?>, Object> nullValues = new HashMap<Class<?>, Object>();
		Map<Class<?>, Object> realValues = new HashMap<Class<?>, Object>();
		for (int i = 0; i < classes.length; i++) {
			nullValues.put(classes[i], null);
			realValues.put(classes[i], values[i]);
		} // end TODO

		// get all possible (set) functions
		System.out.println("incovkeAll on obj " + obj.getClass().getName()); //(1)
		Method[] methods = obj.getClass().getMethods();
		System.out.println(methods.length); //(2)
		for (int i = 0; i < methods.length; i++) {
			Method m = methods[i];
			if (m.getName().startsWith("set")) {
				Class<?>[] argTypes = m.getParameterTypes();
				if (argTypes.length == 1) {
					try {
						m.invoke(obj, nullValues.get(argTypes[0])); // change to realValues
					} catch (IllegalArgumentException e) {
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						e.printStackTrace();
					} catch (InvocationTargetException e) {
						e.printStackTrace();
					}
					if (DEBUG) {
						System.out.println(String.format(
								"function %s(args[%d]) set", m.getName(),
								argTypes.length));
					}
				} else {
					if (DEBUG) {
						System.err.println(String.format(
								"function %s(args[%d]) skipped", m.getName(),
								argTypes.length));
					}
				}
			}
		}
		System.out.println("invokeAll finished.");
	}
die ausführung endet zwischen (1) und (2) ich habe auch schon versucht das mit einem try / catch block abzufangen, allerdings kommt auch dann keine ausgabe/exception!

irgendwelche ideen?
 
Zuletzt bearbeitet von einem Moderator:
Java:
Method[] methods = obj.getClass().getMethods();
// ->
Class c = obj.getClass();
Method[] methods = c.getMethods();

und debug das mal Schrittweise und schau was der Debugger dazu sagt
 
hab den debugger bis jetzt noch nie gebraucht...
wie überwache ich dort eine variable.
breakpoints setzten kann ich, nur bleibt er bei denen nicht mal stehen 😳

edit: wenn ich die klasse ausgeben lasse kommt die richtige...
edit2: hab jetzt ein kleines testprogramm ausserhalb meiner plugin-struktur angelegt.
wenn ich hier das invokeall aufrufe klappts... (WTF?!)
 
Zuletzt bearbeitet:
> die ausführung endet zwischen (1) und (2)

was heißt das denn genau, beendet sich das Programm/ der einzelne Thread (hängt er nicht vielleicht?),
weißt du welche Codezeile als nächstes dran kommt?

den testweisen try / catch block machst du mit Throwable oder Exception?
 
das heisst...
ich habe einen button der die funktion aufruft.
wenn ich den button anklicke dann kommt er genau bis zeile (1)
der rest wird gefressen.
drücke ich den button noch einmal, passiert das selbe wieder.
den try-block mache ich mit Exception da eine SecuirtyException geworfen werden sollte, falls was schiefgeht, was aber nicht gemacht wird...

weißt du welche Codezeile als nächstes dran kommt?
keine, in der funktion - er steigt einfach aus (als ob ich in der funktion ein return/break hätte... das programm läuft danach normal weiter...)
 
Java:
System.out.println("vor");
try {
   invokeAll()
}catch(Throwable t) {
   System.out.println("t gefangen");
} finally {
   System.out.println("ich auch noch");
}
System.out.println("nach");
bringt nur die 'vor'-Ausgabe?
 
nope
Code:
vor
t gefangen
ich auch noch
nach

public Method[] getMethods() throws SecurityException
warum steht die info dort nicht?

@throwable: java.lang.NoClassDefFoundError
hätte ich die info gleich gehabt... jetzt weiss ich was falsch ist...

DANKE!
 

Neue Themen


Zurück
Oben