Aufgerufene .jar läuft erst nach Schließen des Hauptprogramms weiter

jimb0p

Erfahrenes Mitglied
Hallo,

ich habe ein Hauptprogramm als .jar, welches ich normal starte. Aus diesem Programm kann man sechs weitere .jar's über Buttons starten. Das funktioniert auch einwandfrei. Die einzelnen sechs Programme funktionieren direkt gestartet auch fehlerfrei. Öffne ich nun über das Hauptprogramm die eine bestimmte .jar Läuft mein Programm bis ca. 1/4 und bleibt hängen. Schließt man anschließend das Hauptprogramm, läuft das Programm eiskalt weiter. Ich rufe die .jar so im Hauptprogramm auf:

Code:
try {
	Runtime.getRuntime().exec("java -jar tools\\preChecker.jar");
      } catch (IOException e1) {
		e1.printStackTrace();
      }

Eigentlich laufen die Programme doch völlig unabhängig jeder in seiner eigenen JVM oder? Ich kann nicht nachvollziehen, warum es weiter läuft wenn das Hauptprogramm geschlossen wird. Bin über jeden Tipp dankbar.
 
Hast du mal versucht, das Programm mit ein paar Debugmeldungen (siehe meine Sig) zu versehen um zu sehen, ob es immer an der selben Stelle hängt?
Was ist mit den 5 anderen Programmen? Werden die korrekt ausgeführt?
 
Hi.

Das passiert, wenn das aufgerufene Programm entweder auf eine Eingabe wartet oder Ausgaben auf den Ausgabe- oder Errorstream schreibt.

Da dein Programm nichts in die Streams schreibt bzw. liest, hält das Programm an.

Vermutlich betrifft das Problem Ausgaben die dein Programm macht (evtl. ausgelöst durch Exceptions und nachfolgende e.printStackTrace() Aufrufe).

Die Ausgaben sind gepuffert, d.h. erstmal ist es keine Problem etwas auszugeben, aber irgendwann ist der Puffer voll und dann blockiert dein Programm.

Wird das Hauptprogramm jedoch beendet, werden die Streams geschlossen, wodurch die Blockade aufgehoben wird.

Verwende besser einen ProzessBuilder und schließe die Streams direkt wenn du sie nicht brauchst. Willst du die Ausgabe verarbeiten, mußt du die Ausgabe in einem eigenen Thread lesen - je einen für Ausgabe- und Errorstream.

Gruß
 

Neue Beiträge

Zurück