tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1320
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    higginz higginz ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Hallo,

    ich starte aus meinem Java-Programm eine (*.EXE)-Konsolen-Anwendung mit dem Processbuilder. Dabei übergebe ich auch Parameter. Das funktioniert alles super. Einziges Problem: Es öffnet sich keine Konsole für die Anwendung, sie läuft im Hintergrund. Ich möchte aber möglichst die Konsolen-Ausgaben sehen.

    Aufruf:
    String[] command = new String[3];
    command[0] = "C:\\blabla.exe";
    command[1] = "-param1";
    command[2] = "value1";
    ProcessBuilder pb = new ProcessBuilder();
    pb.command(command);
    Process proc = pb.start();

    Wenn ich die Anwendung nicht direkt, sondern über "cmd start" starte, öffnet sich die gewünschte Konsole, aber ich kann die Anwendung nicht mehr über proc.destroy() beenden. Ich vermute, dass da in der Variable proc nicht meine Anwendung, sondern "cmd" steht.

    Die eigene Anwendung muss ich aber - selbst wenn ich sie ausserhalb von Java starte - mit "Strg+C" beenden, da sie sich nicht von alleine beenden lässt.

    Hat jemand einen Tipp, was ich da machen kann?


    Gruß
    Martin
     

  2. #2
    thealflex thealflex ist offline Rookie
    Registriert seit
    Jun 2007
    Beiträge
    7
    Wenn ich dich richtig verstanden hab dann könnte das hier eine Lösung für sich sein.
    Bei dem Beispiel wird alles was auf der Konole steht in der Netbeans/ Eclipse oder was auch immer Konsole ausgegeben.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    import java.io.*;
    import java.util.Scanner;
     
    public class Main {
     
        public static void main(String[] args) throws IOException {
            ExecDir();
        }
     
        public static void ExecDir() throws IOException {
            ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir");
            builder.directory(new File("c:/"));
            Process p = builder.start();
     
            Scanner s = new Scanner(p.getInputStream()).useDelimiter("\\Z");
            System.out.println(s.next());
        }
    }

    Das kannst du dann ja nach belieben in eine Datei schreiben oder in einem Fenster ausgeben oder wie auch immer.

    Hab das Beispiel übrigens aus dem Buch Java ist eine Insel!

    MfG
     

  3. #3
    higginz higginz ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Hallo thealflex,

    danke für die schnelle Antwort.

    Ich weiß schon, wie man die Ausgabe umleiten kann, aber ich möchte ja den mit

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    String[] command = new String[6];
    command[0] = "cmd";
    command[1] = "/c";
    command[2] = "start";
    command[3] = "C:\\blabla.exe";
    command[4] = "-param1";
    command[5] = "value1";
    ProcessBuilder pb = new ProcessBuilder();
    pb.command(command);
    proc = pb.start();

    erstellten Prozess beenden. Also genauer gesagt will ich "blabla.exe" mittels proc.destroy() beenden. Aber proc zeigt auf "cmd" und nicht auf "blabla.exe".

    Ich hoffe, es ist verständlich, was ich möchte.
     

  4. #4
    _jsd_ Tutorials.de Gastzugang
    hi,

    solltest vieleicht das cmd weg lassen!? und nur start blbla.exe aufrufen....

    hmf
    Geändert von _jsd_ (06.12.07 um 11:35 Uhr)
     

  5. #5
    higginz higginz ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Hallo _jsd_,

    sorry, ich verstehe deinen Tipp nicht.

    Meinst du, ich sollte dem ProcessBuilder ein Startverzeichnis (hier: "c:\\") mitgeben und dann als Anwendung nur noch "blabla.exe" übergeben? Dann bekomme ich eine IOException mit der Meldung: "CreateProcess error=2, Das System kann die angegebene Datei nicht finden."

    Wenn ich die EXE mit dem gesamten Pfad ausführe und kein Verzeichnis setze, läuft zwar die Anwendung wie geschmiert, aber ich sehe keine Ausgabe. Vielleicht sollte ich hier einen weiteren Prozess "cmd" starten und dem den InputStream von "blabla.exe" übergeben?

    Was meinst du mit "ohne verzeichniswechsel"? Mache ich den denn überhaupt?

    Nur mit "start" und ohne "cmd" gehts auch nicht, da ja "start" ein Konsolenbefehl ist, den er sonst garnicht kennt.
     

  6. #6
    _jsd_ Tutorials.de Gastzugang
    ungefähr so start c:\blabla.exe und prüf mal nach warum keine ausgabe kommt
     

  7. #7
    higginz higginz ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Immer wenn ich versuche "start" ohne vorher "cmd" aufzurufen, krieg ich den Fehler, dass er die Datei (start) nicht finden kann. Die gibts ja auch nicht in meinem Verzeichnis. Wie gesagt, ist ja auch ein Konsolenbefehl.

    Die Ausgabe mittels dem Code von thealflex funktioniert zwar, aber sie bleibt irgendwo hängen, genauso wie mein Java-Programm.
     

Ähnliche Themen

  1. C#: Beenden von Anwendung verhindern?
    Von lordfritte im Forum .NET Windows Forms
    Antworten: 7
    Letzter Beitrag: 11.10.07, 16:27
  2. Antworten: 2
    Letzter Beitrag: 25.09.07, 17:47
  3. Konsolenfenster in MFC-Anwendung
    Von zonki im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 01.04.05, 09:55
  4. [C] beenden der anwendung verhindern
    Von daleIlowmo im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 23.08.03, 14:30
  5. beenden der anwendung
    Von thecooper im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 26.07.03, 16:04