tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1293
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    Hi

    ich möchte ein Programm schreiben, welches andere Java-Programme startet. Ich habe schon überlegt dies so zu machen:

    Code java:
    1
    
    Runtime.getRuntime().exec("cmd.exe "+startargumente);

    allerdings haperts schon bei den Startargumenten.

    Ich habe das mal manuell in der cmd.exe versucht:
    Code :
    1
    
    java <Pfad zur Klasse, wo main drin ist>
    aber schon da bekomme ich den Fehler
    Code :
    1
    
    Exception in thread "main" java.lang.NoClassDefFoundError: <Pfad>

    Ziel ist es, die class-Dateien von den Programmen auszuführen, indem ich den Pfad der Dateien an cmd.exe sende. Weiß jemand was ich falsch mache?

    MfG thomy
     
    Hier kommt der Genuss!

  2. #2
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Zum Beispiel, dass cmd keine Class-Dateien starten kann?
    Ausführen musst du das ganze über java.exe.

    Desweiteren wirst du ein Problem mit verschiedenen Ordnerstrukturen usw. haben. Evtl. ist es erst erforderlich in ein bestimmtes Verzeichnis über den Ordnern zu wechseln, um das Programm mit dem richtigen Class-Path starten zu können.
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  3. #3
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Versuch mal nen Ausführungsverzeichnis mit zu setzen:
    Code java:
    1
    2
    3
    
    public Process exec(String[] cmdarray,
                        String[] envp,
                        File dir)

    Also:
    Code java:
    1
    
    Runtime.getRuntime().exec(new String[]{"java","package.Class"},null,new File("execDir"));
    Ab Java 1.5 bitte ProcessBuilder verwenden.
     

  4. #4
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    Naja, cmd.exe verwende ich ja nur um java.exe zu starten.

    Und müsste das mit den Ordnungstrukturen nicht egal sein, wenn ich den absoluten Pfad der java.exe übergebe?

    edit:
    Habe das jetzt mit dem Processbuilder probiert, aber es passiert nichts:
    Code java:
    1
    2
    
    ProcessBuilder pb = new ProcessBuilder("java","D:\\start1\\start.class") ;
                pb.start();
    Geändert von thomy800 (20.05.08 um 17:15 Uhr)
     
    Hier kommt der Genuss!

  5. #5
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    Und müsste das mit den Ordnungstrukturen nicht egal sein, wenn ich den absoluten Pfad der java.exe übergebe
    Leider nein, die Abhängigkeiten der Klassen untereinander ist relativ, darum kommt es auf das Verzeichnis an, in dem du dich gerade befindest, während du das ausführst.

    So hat es sich zumindest immer bei mir dargestellt - lasse mich gerne eines besseren belehren.

    Und wenn schon cmd.exe dann cmd /c - startet ein Konsolenfenster, dass sich gleich wieder nach Ausführen des Befehls schließt. Das ist aber unnötig, du kannst auch direkt java.exe ansprechen.
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  6. #6
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    Ok, ich seh jetzt gar nicht mehr durch

    Also, ich habe den <Pfad a> wo meine momentane <class start> ausgeführt wird. Diese soll nun die <class exc> starten, welche sich bei <Pfad b> befindet. Wie sähe nun der Befehl, der in <class start> steht, aus?
     
    Hier kommt der Genuss!

  7. #7
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Versuch das:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    package de.tutorials;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public class JavaApplicationStart {
     
        private static void startJavaApplication(File execDir, String mainClass) {
            ProcessBuilder b = new ProcessBuilder("java", mainClass);
            b.directory(execDir);
            b.redirectErrorStream(true);
            try {
                // Starten
                final Process p = b.start();
     
                // Ausgabe lesen
                final InputStream processOutput = p.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        processOutput));
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
        public static void main(String[] args) {
            // Starte die Klasse de.tutorials.HelloWorld im Ausführungsverzeichnis
            // bin
            startJavaApplication(new File("bin"), "de.tutorials.HelloWorld");
        }
     
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    package de.tutorials;
     
    public class HelloWorld {
     
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
     
    }

    Gibt bei mir wie gewünscht aus:
    Hello World
     

  8. #8
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    Ich weiß nicht, was ich falsch mache...
    ich habe diese beiden Quelltexte kopiert, einen Order "bin" im Verzeichnis erstellt, wo auch die beiden Klassen sind und trotzdem kommt der Fehler:

    Code :
    1
    2
    
    java.lang.NoClassDefFoundError: HelloWorld
    Exception in thread "main"


    Geändert von thomy800 (20.05.08 um 18:09 Uhr)
     
    Hier kommt der Genuss!

  9. #9
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Ordnerstruktur in bin muß der Packagestruktur entsprechen:
    bin
    - de
    --- tutorials
    ----- HelloWorld.class
     

  10. #10
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    test
    --JavaApplicationStart.class
    --bin
    ---- de
    -------- tutorials
    ------------- HelloWorld.class
    und zusätzlich
    --de
    -----tutorials
    ------HelloWorld.class

    und trotzdem:
    Code :
    1
    2
    
    java.lang.NoClassDefFoundError: de/tutorials/HelloWorld
    Exception in thread "main"

    Aber JavaApplicationStart muss nicht in bin sein, oder?
     
    Hier kommt der Genuss!

  11. #11
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Tu mal folgendes:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    public static void main(String[] args) {
            File f = new File("bin");
            System.out.println(f.getAbsolutePath());
            // Starte die Klasse de.tutorials.HelloWorld im Ausführungsverzeichnis
            // bin
            startJavaApplication(f, "de.tutorials.HelloWorld");
        }

    Dann siehst du wo er versucht bin zu finden!
     

  12. #12
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    also bin findet er:
    .../test/bin
    und wenn bin nicht gefunden wird, gibts den Fehler:

    java.io.IOException: CreateProcess: java de.tutorials.HelloWorld error=267
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
    at JavaApplicationStart.startJavaApplication(JavaApplicationStart.java:37)
    at JavaApplicationStart.main(JavaApplicationStart.java:78)
    at __SHELL2.run(__SHELL2.java:7)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:792)
    also nehm ich mal an, dass das Problem irgendwo bei HelloWorld liegt...
     
    Hier kommt der Genuss!

  13. #13
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Hast du es so genommen wie ich es gepostet habe und kompiliert?
     

  14. #14
    thomy800 thomy800 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    245
    jap, 100%ig kopiert
     
    Hier kommt der Genuss!

  15. #15
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Irgendwas wirst du ja falsch machen.... entweder du suchst selber weiter oder du schreibst hier mal ganz genau was du in welcher Reihenfolge gemacht hast.
     

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 28.07.09, 17:48
  2. Java Class von JFrame aus ausführen?
    Von Tobias Feld im Forum Java
    Antworten: 2
    Letzter Beitrag: 15.04.09, 06:01
  3. Class zu Java-Dateien decompilieren?
    Von Sebastian29 im Forum Java
    Antworten: 4
    Letzter Beitrag: 18.04.08, 18:39
  4. 2 class dateien verknüpfen
    Von Schatti im Forum Java
    Antworten: 4
    Letzter Beitrag: 14.10.03, 15:02
  5. Class Dateien
    Von BomberJack im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 20.07.01, 21:44