Externe Programm starten

Hallo,

ich habe hier ein Kommandozeilenprogramm, das auf eben dieser einige Ausgaben generiert (ja, das läuft dann halt nur unter Windows, aber egal). Diese Programm möchte ich aus einer Java-Applikation starten und die Ausgaben in einem String speichern. Zum Starten verwende ich:

Runtime.getRuntime().exec("./dateiname.exe");

Allerdings erscheint daraufhin in der DOS-Box nur „Press any key to continue“, die eigentlich Ausgaben sehe ich nicht. Das Programm an sich erscheint aber im Task-Manager, wurde also korrekt gestartet.

Weiss jemand, wieso die Ausgaben nicht zu sehen sind? Starte ich es manuell von der Kommandozeile, dann funktioniert’s auch.

Viele Grüße, Robert

Hallo,

ich habe hier ein Kommandozeilenprogramm, das auf eben dieser
einige Ausgaben generiert (ja, das läuft dann halt nur unter
Windows, aber egal). Diese Programm möchte ich aus einer
Java-Applikation starten und die Ausgaben in einem String
speichern. Zum Starten verwende ich:

Runtime.getRuntime().exec("./dateiname.exe");

Das Prog. darf dann nicht auf die Console (DOS-box) zugreifen und alles landet in Prozess.:

OutputStream getErrorStream()
Gets the error stream of the subprocess.

InputStream getInputStream()
Gets the input stream of the subprocess.

OutputStream getOutputStream()
Gets the output stream of the subprocess.

Allerdings erscheint daraufhin in der DOS-Box nur „Press any
key to continue“,

Wo der herkommt solltst du mal rausfinden, das ist nicht ganz normal.

die eigentlich Ausgaben sehe ich nicht.

Die Ausgaben von Prozess.getOutputStream() nach System.out „kopieren“. das heist einen PipedStream dazwischenbauen. (oder manuel mit , while (true) {System.println (Stream.read());})

cu

Hallo,

Das Prog. darf dann nicht auf die Console (DOS-box) zugreifen

[…]

Allerdings erscheint daraufhin in der DOS-Box nur „Press any
key to continue“

Wo der herkommt solltst du mal rausfinden, das ist nicht ganz
normal.

Ich habe jetzt das externe Programm mal so umgeschrieben, dass es seine Ausgaben in eine Datei schreibt, ich also mich nicht mehr mit dem Einlesen von den Streams beschäftigen muss. Allerdings behauptet sich wohl Deine Vermutung, dass das Programm gar nicht auf die DOS-Box zugreifen kann. Denn auch jetzt erscheint nur „Press any key to continue“, und die Ausgabedatei wird auch nicht erstellt. Kann man von Java aus generell keine Kommandozeilenprogramme ausführen?

Viele Grüße, Robert

Ich habe jetzt das externe Programm mal so umgeschrieben, dass
es seine Ausgaben in eine Datei schreibt, ich also mich nicht
mehr mit dem Einlesen von den Streams beschäftigen muss.
Allerdings behauptet sich wohl Deine Vermutung, dass das
Programm gar nicht auf die DOS-Box zugreifen kann. Denn auch
jetzt erscheint nur „Press any key to continue“, und die
Ausgabedatei wird auch nicht erstellt. Kann man von Java aus
generell keine Kommandozeilenprogramme ausführen?

an sich theo. schon. Allerdings hab ich noch keins gesehen das funzte. Die meiste benutzen einfach die Stream´s und zeigen ein Text-feld mit der Ausgabe an.

Der beste Ansatz (der am weitesten kam)(unter windoff) war command.com (cmd.com) die Ausführung zu überlassen. (cmd Prog). Ein anderer möglicher Ansatz ist rundll (auch windows) zu benutzen.

die JVM hat generell nur die 3 Stream´s, und gibt die nicht ab. neue erzeugen kann sie nicht, fork() baut ja auch keine per-se neuen Stream´s.

Hab´s damals mit einem Textfeld gelöst.

cu