Variabel Methoden Aufrufen

MScalli

Erfahrenes Mitglied
Hi leutz.
weiss jemand wie ich variabel methoden aufrufen kann?

z.b.
ich hab ne config datei aus der ich sachen auslese und diese in meiner Klasse MyParam mittels Methoden zur Verfügung stelle.

es gibt die Methoden getF1() bis getF12()..
jetzt kann ich diese so aufrufen

Code:
callClass(MyParam.getF7()[7]);

in Feld 7 dieses Arrays steht z.Bb der Klassenname der Klasse die Ich aufrufen will.

einzeln ist dies ja kein problem, da ich das jetzt aber zwecks übersichtlichkeit bisschen kürzen will und die Klassen in ner Schleife aufrufen will muss ich die Methoden ja Variabel aufrufen können.

geht das mit ner art String array in der die Methodenaufrufe drin stehen
und wenn ja wie?

wenn ich mir so ein array wie unten angegeben baue.. kann ich dann die Methoden so aufrufen!
Code:
String[] MethAufrufe = {MyParam.getF1(), ....., MyParam.getF1()}
 
Hallo,

was meinst du mit Klasse aufrufen? ... Man kann nur Methoden / Konstruktoren aufrufen. Willst du vielleicht die Main-Methode dieser Klassen ausführen?

Gruß Tom
 
Habe es vielleicht bisschen falsch ausgedrückt.

die Klassen kann ich aufrufen über nen String. Das ist nicht das Problem.
Ich möchte gerne ne Schleife durchlaufen und je nach durchgang eine andere Methode aufrufen. Hier mal bisschen code

Code:
	private void setFunctionKeys() {
	    AWTEventListener ael = new AWTEventListener() { 
			public void eventDispatched(AWTEvent e) {
				KeyEvent ke = null;
				
				if(e instanceof KeyEvent){
					ke = (KeyEvent)e;

					if(ke.getID() == KeyEvent.KEY_PRESSED){
						
					    int pressed_key = ke.getKeyCode();
					    //System.out.println(pressed_key);
					    for(int kezaehl = 0; kezaehl < arr_fkeys_num.length; kezaehl++){
						    if(pressed_key == arr_fkeys_num[kezaehl]){
						    	ke.consume();//Löst das Problem mit der F10 Taste 
                                                        // Hier soll je nach durchgang eine andere Methode aufgerufen werden(getF1() - getF12())
						    	callClass(MyParam.getF1()[7]);
						    	//System.out.println(arr_fkeys_bez[kezaehl]);	
						    }
					    }
					}
				}
			} 
	    }; 
	    Toolkit.getDefaultToolkit().addAWTEventListener( ael, AWTEvent.KEY_EVENT_MASK );
	}

Ihr braucht das callClass gar nicht beachten, denn ich lese den Klassennamen auch aus ner Textdatei. Meine Frage ist wie kann ich immer ne andere Methode aufrufen!!

also im ersten durchlauf getF1() im zweiten durchlauf getF2() usw.
 
Wie gesagt, da kannst du Reflection nutzen. Da kannst du die Methoden auch als String schreiben und per Reflection ausführen. Schau mal in den Link den ich oben gepostet hab.

MFG

Sascha
 
Ja.. Ich glaub schon das das macht was ich will..
nur hab ich mir diesen Link schon 7 mal durchgelesen und raffs nicht ganz.

ich hab jetzt mal alle Exceptions abgefangen um zu wissen was los ist..
und was bei den argumenten gemeint ist da bin ich mir auch nicht so sicher..
habs einfach mal so gelassen..

das bekomm ich als Fehlermeldung

java.lang.NoSuchMethodException: BDEPackage.BeginnRuesten.test([Ljava.lang.String;)
at java.lang.Class.getMethod(Unknown Source)
at BDEPackage.BDE.callMethod(BDE.java:492)
at BDEPackage.BDE.<init>(BDE.java:56)
at BDEPackage.BDE.main(BDE.java:379)
Exception in thread "main" java.lang.NullPointerException
at BDEPackage.BDE.callMethod(BDE.java:505)
at BDEPackage.BDE.<init>(BDE.java:56)
at BDEPackage.BDE.main(BDE.java:379)

und hier mal mein code(wie gesagt hab jetzt alle Exceptions abgefangen ;)

Code:
	private void callMethod(){
            // wozu das ist weiss ich nicht!! ;)
	    String[] argv = { "-option", "Parameter" }; 
	    
	    Method method = null;

			try {
                               //Package --> BDEPackage Klasse --> BeginnRuesten Methode --> test
				method = Class.forName( "BDEPackage.BeginnRuesten" ).getMethod( "test", argv.getClass() );
			} catch (SecurityException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			try {
				method.invoke( null, new Object[]{ argv } );
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}   
	}
 
habs..
Code:
	private void callMethod(){
	    String[] argv = { "-option", "Parameter" }; 
	    
	    Method method = null;
	    Class<?> clazz = null;
		try {
			clazz = Class.forName("BDEPackage.BeginnRuesten" );
			Object o = clazz.newInstance();
			clazz.getMethod( "test" ).invoke( o );
		} catch (Exception e) {
			e.printStackTrace();
	}

thx an alle!!
 
Du solltest dir das Thema mal richtig durchlesen. :-)

Die Argumente sind die Übergabeparameter. In dem Beispiel wird die main-Methode einer Klasse aufgerufen und die hat als Übergabeparameter ein String-Array.

Du musst da natürlich das reinpacken was du brauchst.

MFG

Sascha
 
Zurück