Für Experten: java.lang.reflection Problem

blueflash

Member of Honour
Hi,

ich bin mir nicht sicher, ob jemand hier die Erfahrung dafür hat, aber ich versuchs mal:

Ich habe einen Parsergenerator in java, der u.A. einen Lexer erzeugt. Diesen Lexer möchte ich gern testen - dazu habe ich einen junit Test geschrieben, der die erzeugte (und compilierte) .class Datei einliest und eine statische Methode darauf ausführen soll.
Hier ist der Code:

Code:
		Class lexerDefs = Class.forName("parser.LexerDefs", true, loader);
		
		Method getLexerDefs = null;
		
		try {
			getLexerDefs = lexerDefs.getMethod("lexerDefs", new Class[] {});
		} catch (NoSuchMethodException e) {
			fail("Class " + lexerDefs.getName() + " has no method lexerDefs()\n" + e.getMessage());
		}
		
		parser.Options.inputFile = this.inputFile;

		System.err.println("invoking: " + getLexerDefs.toString());		

		Object retObject = getLexerDefs.invoke(null, new Object[0]);

Aber ich kriege nur:

Code:
    [junit] Class test.TestParserGenerator can not access a member of class parser.LexerDefs with modifiers "public static"
    [junit] java.lang.IllegalAccessException: Class test.TestParserGenerator can not access a member of class parser.LexerDefs with modifiers "public static"

Aber warum kann ich keine "public static" Methode aufrufen???
 

blueflash

Member of Honour
AAARGGH, manchmal sind Fehlermeldungen aber auch wirklich zu blöde. Der Fehler lag nicht im Zugriff auf die Methode, die Klasse selbst hätte public sein müssen.
 
Oben