Probleme mit laufenden Prozessen

simulog

Grünschnabel
Hallo,

habe ein Problem und hoffe, dass mir hier geholfen werden kann. Folgendes Problem: Ich möchte von Java aus mit Hilfe des Kommandos getRuntime().exec( ... ein Latex-Dokumenent übersetzen und anschließend mit yap das dvi-File anzeigen lassen. Im Prinzip funktioniert das auch, leider führt die Befehlsfolge

File path = new File("c:\\Daten\\Bewerber");
try {
p = Runtime.getRuntime().exec("cmd /C latex data.tex",null,path);
} catch (Exception e) {
System.err.println("CreateLatex-error " +e);
}

dazu, dass das dvi-File nicht erzeugt wird. Ich rufe diese Befehlsfolge über ein Button, das in einem JTabbedPanel steckt, auf. Dann bleibt der Prozess aber "hängen". Klicke ich auf ein anderes Panel und dann wieder zum ursprünglichen zurück, wird die Befehlsfolge (bzw. der Prozess) wie gewünscht ausgeführt bzw. beendet und ich kann mit yap das dvi-File ansehen (Dies funktioniert auch, wenn ich beispielsweise eine JComboBox anklicke und ein item auswähle.). Habe schon versucht durch Thread.sleep(15000) eine Verzögerung einzubauen, klappt aber auch nicht.

Für Hilfe wäre ich sehr dankbar!

Stephan

P.S.: Ich weiß, dass die Arbeit mit getRuntime().exec() nicht unproblematisch ist. In dem Kontext, in dem das Programm eingesetzt werden soll, ist es aber durchaus eine sinnvolle Lösung.
 
Servus!

Das .exec("mycommand.exe") blockiert ist ein altbekanntes Problem. Das Kommando, das du versuchst auszuführen erzeugt wahrscheinlich Ausgabe auf stdout oder stderr werden diese Streams nicht geeschlossen, können sie stehen bleiben ...

also immer:

Code:
Runtime r = Runtime.getRuntime();

		Process p;
		try {
			p = r.exec("Test.exe");

			p.getErrorStream().close();
			p.getOutputStream().close();
			p.getInputStream().close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Gruß Tom
 

Neue Beiträge

Zurück