tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
326
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kutamn kutamn ist offline Rookie
    Registriert seit
    Jun 2008
    Beiträge
    8
    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 :
    1
    2
    3
    4
    5
    6
    
    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
    Geändert von kutamn (05.12.08 um 14:39 Uhr)
     

  2. #2
    Avatar von benhaze
    benhaze benhaze ist offline Mitglied Gold
    Registriert seit
    Jun 2006
    Ort
    Bochum (NRW)
    Beiträge
    186
    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.

    Code java:
    1
    2
    
    String strg = bin.readLine();
    Class theClass = strg.getClass(); //strg ist vom Typ String!

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

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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...)
     

  3. #3
    kutamn kutamn ist offline Rookie
    Registriert seit
    Jun 2008
    Beiträge
    8
    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
     

  4. #4
    Avatar von benhaze
    benhaze benhaze ist offline Mitglied Gold
    Registriert seit
    Jun 2006
    Ort
    Bochum (NRW)
    Beiträge
    186
    Ich war mal so frei und habe schnell 2 kleine Beispiele gebastelt:

    Bsp1:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    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.
     

Ähnliche Themen

  1. Java Reflection Object ein Interface implemetieren
    Von raphael_fehlmann im Forum Java
    Antworten: 10
    Letzter Beitrag: 05.09.10, 14:43
  2. Java Reflection, Commit und Validierung
    Von MS-Tech im Forum Java
    Antworten: 3
    Letzter Beitrag: 17.08.10, 15:13
  3. Antworten: 3
    Letzter Beitrag: 21.01.08, 10:26
  4. Antworten: 9
    Letzter Beitrag: 15.01.08, 10:56
  5. Reflection in Java 1.5
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 12.03.04, 14:58