Methoden Runtime.getRuntime().exec(befehl);

wie kann ich fremdprogramme in java ausführen ?

  • nur in grafisch orientierten pgm

    Stimmen: 0 0,0%
  • überhaupt nicht

    Stimmen: 1 100,0%

  • Anzahl der Umfrageteilnehmer
    1
  • Umfrage geschlossen .

Onkel Tom

Mitglied
Hallo Forum,
möchte eine EXE (gerne auch COM oder BAT) über java-code starten.
funktioniert nur nicht. konnte zu dem Thema in meinen eigenen Büchern nichts finden.
keine Ahnung wo der fehler liegt. das Programm soll in der shell laufen.
meine.exe kann im Verzeichnis liegen, das Programm rauscht die try-catch formation durch, doch meine.exe wird nicht gestartet. fehlt dagegen die meine.exe wird der catch-zweig angesprungen und java macht das was es auch soll.
den code habe ich übrigens bei euch gefunden, ist mittlerweile 10 jahre alt, aber das macht ja nichts.

ciao,
onkel tom


Java:
import java.io.*;
import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io_OutputStream;
//import java.util.Timer;
//import java.util.TimerTask;
//import java.util.concurrent.TimeoutException;

class extern1
{
public static void main(String args[])

    {
       String befehl = "meine.exe";
       System.out.println("TestProgramm\n\n" );
      try{
            System.out.println("stehe vor dem aufruf  "+befehl);
            Runtime.getRuntime().exec(befehl);
            System.out.println("alles okay ");
          }

       catch(IOException e)
            {
               System.out.println("fehler ist eingetreten");
               System.out.println(e);
               System.exit(1);
              return;
           }
       finally{ System.out.println("bin aus der try-catch wieder raus");}
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Bitte immer in Code-Tags schreiben.
Java:
import java.io.*;
import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io_OutputStream;
//import java.util.Timer;
//import java.util.TimerTask;
//import java.util.concurrent.TimeoutException;

class extern1
{
    public static void main(String args[])
    {
        String befehl = "meine.exe";
        System.out.println("TestProgramm\n\n");

        try
        {
            System.out.println("stehe vor dem aufruf " + befehl);
            Runtime.getRuntime().exec(befehl);
            System.out.println("alles okay");
        }
        catch(IOException e)
        {
            System.out.println("fehler ist eingetreten");
            System.out.println(e);
            System.exit(1);
            return;
        }
        finally
        {
            System.out.println("bin aus der try-catch wieder raus");
        }
    }
}
 
Das Problem wird sein, dass deine exe zwar ausgeführt wird, du das aber nicht siehst, weil du die stdin/stdout/stderr Streams nicht an die Konsole des Java-Prozesses weiterleitest. Das heißt, falls deine exe etwas ausgibt, siehst du das nicht, weil an seinen stdout niemand horcht. Versuch's mal so:
Java:
public static void main(String[] args) throws Exception {
  ProcessBuilder pb = new ProcessBuilder("meine.exe");
  pb.inheritIO(); // <- vererbe stdin/stdout/stderr
  Process p = pb.start();
  p.waitFor();
}
 
leider ist das in Java etwas vertrackt.... das soll heißen es ist wenig bis gar nicht möglich. In anderen Programmiersprachen ist das wesentlich leichter.
 
Das Problem wird sein, dass deine exe zwar ausgeführt wird, du das aber nicht siehst, weil du die stdin/stdout/stderr Streams nicht an die Konsole des Java-Prozesses weiterleitest. Das heißt, falls deine exe etwas ausgibt, siehst du das nicht, weil an seinen stdout niemand horcht. Versuch's mal so:
Java:
public static void main(String[] args) throws Exception {
  ProcessBuilder pb = new ProcessBuilder("meine.exe");
  pb.inheritIO(); // <- vererbe stdin/stdout/stderr
  Process p = pb.start();
  p.waitFor();
}
Möchte mich gerne beim Wissenden bedanken, "Je später der Abend, desto feiner die Gäste" Tolles Forum.
 
Wahrscheinlich Ironie, aber ich kann Dir das Benehmen verzeihen weil Du nicht verstanden hast was ich schreiben wollte. 🙂
 

Zurück
Oben