externes Programm starten, Hauptanwendung friert ein



  • Hallo Leute,
    ich starte aus einem Java-Programm heraus ein externen Programm welches ich parallel zu meiner Anwendung benutzen möchte. Allerdings friert meine Anwendung hierbei immer ein und ich weiß nicht so recht wie ichs verhindern kann. Hat das was mit dem Aufruf zu tun oder ist das eher ein Windows/Task Manager Problem?

    Den Aufruf starte ich ganz normal über die Runtime:

    Runtime.getRuntime().exec("externesProgramm");
    

    Weiß wer rat?

    Viele Dank
    der _n3rd_



  • Keine Ahnung! Bei mir funktioniert das so.

    Machst du noch irgendwas mit dem gestartetn Prozeß? Z.B. dessen
    Outputstreams auslesen? 😕



  • rischtisch! nach dem exec() kommt bei mir noch ein Lesen der Streams. Schreibe mir hier sowohl den InputStream als auch den ErrorStream vom Process-Objekt in ein Logfile. Das mal rausnehmen?



  • n3rd schrieb:

    Das mal rausnehmen?

    Nein! Einfach den gesamten Aufruf (incl. der Streamoperationen) in
    einen eigenen Thread auslagern sodaß dein Hauptprogramm
    währenddessen noch weiterarbeiten kann.



  • mmh, irgendwie bringt das nichts. ich hab da jetzt stehen:

    new Thread() {
    @Override
    public void run() {
    try {
    Runtim.getRuntime().exec("blabla");
    //hier noch kram mit dem InputStream und ErrorStream
    }
    catch(Exception e) {
    //hier rumgelogge
    }
    }
    }.start();
    

    Er geht zwar in den Thread aber es passiert nichts. Beim Debuggen sehe ich dass er ne IOException wirft was soweit auch richtig ist, diese wird aber nur über printStacktrace ausgegeben und nicht über den logger (der org.apache.log4j.Logger). Desweiteren frage ich mich wie ich denn die auftretenden Exception aus dem Thread raus throwen kann, die möchte ich nämlich nicht dort behandeln sondern beim Caller.



  • Du möchtest das Programm starten und das lesen der Ausgabestreams in einem seperaten Thread machen. Java erstellt mit exec() einen eigenen Prozess und liefert dir ein entsprechendes Process Objekt zurück, so dass du das nicht in einen eigenen Thread ausgliedern brauchen solltest.


Anmelden zum Antworten