Reflection benutzen um 2-te Java zu starten

kutamn

Grünschnabel
Hallo,
ich bin Anfänger, habe nicht viel Ahnung, was um Programmieren geht.

Aber ich muss während eine Ausführung eines Java-Programms mit Hilfe von Reflection den 2-ten Java Programm starten.

Ich habe diese Paarzeile geschrieben:

Code:
BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		 
System.out.println("Bitte Namen eingeben: ");
String strg = bin.readLine();
						
Class theClass = strg.getClass();

Hier bekomme ich keine Compilerfehler, aber wird der 2-te Programm nicht ausgeführt, also keine Reaktion.
Kann jemand mir sagen, warum und wie ich mein Code korrigiere....

Danke im Voraus
Enkhee
 
Zuletzt bearbeitet:
Also ganz ehrlich? Ich habe gar nicht verstanden was du machen möchtest.

den (2-ten Java) Programm mit Hilfe von Reflection starten
(*den Programm*...hört sich echt nicht gut an...)

Möglicherweise möchtest du einfach eine Main?-Methode mittels Reflection aufrufen?

Hier bekomme ich keine Compilerfehler, aber wird der 2-te Programm nicht ausgeführt, also keine Reaktion.
naja, alles andere hätte mich gewundert....
du hast dir nur die String-Klasse geholt.

Java:
String strg = bin.readLine();
Class theClass = strg.getClass(); //strg ist vom Typ String!

besser wäre evtl (je nachdem was du machen möchtest) :

Java:
String strg = bin.readLine();
Class theClass = Class.forName(strg);
Object o = theClass.newInstance();
Method[] methods = theClass.getMethods();

//wenn du die korrekte Methode hast,
//rufst du irgendwann: myMethod.invoke(o,...); auf
(der Code ist jetzt so *freihändig* enstanden...)
 
Hallo benhaze,

zuerst danke für deine Antwort.

Was ich machen wollte, ich muss ein klein Tool, das der Ablauf des testenden Java-Programms zur gegebenen Spezifitkation Konsistent ist, implementieren. Wenn der User mein Tool benutzen will, lässt starten. Es wird von meinem Tool aus gefragt, welche Java-Programm getestet wird. Da muss der User entweder den Name oder den Pfad eintippen. Dann wird mein Tool dieser Java-Programm starten und testen.
Daher brauche ich irgendwie dieser 2-te JavaProgramm starten. Ich denke, da brauche ich nur die Main-Methode zu starten.
Also bin ich nicht gut beim Programmieren, daher weiss ich auch nicht für mein Problemm Reflection richtig zu sein. Kannst du bitte mir bisschen mehr sagen oder
einen funktionsfähigen Code schicken?

Danke im Voraus
Enkhee
 
Ich war mal so frei und habe schnell 2 kleine Beispiele gebastelt:

Bsp1:
Java:
public static void main(String[] args)
    {
      BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("Klassenname inkl. Classpath eingeben (z.B de.tuts.TestKlasseMitMainMethode):");
      try
      {
         String classname = bin.readLine();
         Class theClass = Class.forName(classname);
         Object o = theClass.newInstance();
         Method mainMethod = theClass.getMethod("main", new Class[]{String.class});
         mainMethod.invoke(o, new Object[]{});
      }
      catch(Exception p_ex) //Exception-Handling sollte angepasst werden!
      {
         p_ex.printStackTrace();
      }
    }

Bsp2:
Java:
public static void main(String[] args)
    {
      BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("Pfad zum Programm (z.B c:/programme/TestApp/Test.exe):");
      try
      {
         String execute = bin.readLine();
         ProcessBuilder pb = new ProcessBuilder(new String[]{execute});
         Process proc = pb.start();
         int exitValue = proc.waitFor();
         if (exitValue == 0)
            System.out.println("Alles OK!");
      }
      catch(Exception p_ex) //Exception-Handling sollte angepasst werden!
      {
         p_ex.printStackTrace();
      }

    }

Das habe ich gemacht, weil ich im Moment eh am Arbeiten bin und mal schnell ne Ablenkung brauche.
Über die Suchfunktion oder bei Google findet man dazu ziemlich viele Beispiele.
 
Zurück