unhandled exception type IOException

Hm, das verstehe ich nun wieder nicht. Vor dem ersten try-catch Block steht
Java:
Process dnc = null;
Danach kommen die beiden Blöcke. Es werden beide aufgerufen, das habe ich mit MessageBoxen getestet. Das Programm läuft nur einfach über das waitFor drüber, ohne zu warten.
 
Sorry, du hast recht. Ich hab mich verschaut (an der falschen Einrückung des Codes orientiert).

Kann es sein, dass diese Methode waitFor() nicht implementiert ist?
Bekommst du einen StackTrace (vom 2. try-catch-Block)?
Kannst du mal mit z.B. dem frei verfügbaren Process Explorer, http://technet.microsoft.com/de-de/sysinternals/bb896653 nachprüfen, ob der Prozess nicht doch schon beendet ist?
 
Zuletzt bearbeitet:
STRG+ALT+ENTF > Taskmanager > Prozesse > Alle Prozesses Anzeigen

Das geht auch mit Windows-Mitteln.
 
Nein, der Prozess ist ganz sicher nicht beendet, denn ich sehe das Fenster des dncver.exe noch vor mir.

Und sorry für die falsche Einrückung, da hab ich auf die Schnelle nicht drauf geachtet.
 
@SpiKEe: der Windows-Taskmanager hat nur viel weniger Features. Unter anderem kann man mit seiner Hilfe nicht erkennen, welcher Prozess von welchem gestartet wurde (war zumindest mit XP so). Damit wäre der Taskmanager hier unbrauchbar.
 
Es ist doch völlig egal zu wissen welcher Prozesses von welchem gestartet wurde. Bei dem Problem mit waitFor() ging es lediglich darum zu prüfen ob der Chilprozess überhaupt noch läuft ... da brauch ich kein aufgeblähtes Tool mit was weis ich nich alles drin ...
 
Hi.
Es ist doch völlig egal zu wissen welcher Prozesses von welchem gestartet wurde. Bei dem Problem mit waitFor() ging es lediglich darum zu prüfen ob der Chilprozess überhaupt noch läuft ...
Genau das kannst du aber nicht, wenn du nicht weißt ob ein laufender dncver.exe Prozess überhaupt von dem Java-Programm gestartet wurde oder nicht... (außer es läuft vorher keiner).

@Joerg66: Dein Code sollte eher so aussehen:
Java:
try {
  Process p = new ProcessBuilder("c:/program files/dnc/dncver.exe", arg1, arg2).start();
  try {
    p.waitFor();
  } catch ((InterruptedException e1) {
   e1.printStackTrace();
  }
} catch (IOException e1) {
   e1.printStackTrace();
}
Es macht ja keinen Sinn waitFor aufzurufen, wenn der Prozess nicht gestartet werden konnte.

Und die ProcessBuilder Klasse ist unter Verwendung von varargs vorzuziehen, da mußt du die Argumente nicht irgendwie in Anführungszeichen setzen etc.

(Normale Schrägstriche funktionieren unter Windows genauso wie Backslashes)

Gruß
 
Genau das kannst du aber nicht, wenn du nicht weißt ob ein laufender dncver.exe Prozess überhaupt von dem Java-Programm gestartet wurde oder nicht... (außer es läuft vorher keiner).

Ich bin jetzt davon ausgegangen das genau das der Fall ist. Außerdem nützt es dir auch nichts zu wissen das y.exe von x.exe gestartet wurde wenn beide mehrfachvorhanden sind.
 
Ich bin jetzt davon ausgegangen das genau das der Fall ist. Außerdem nützt es dir auch nichts zu wissen das y.exe von x.exe gestartet wurde wenn beide mehrfachvorhanden sind.
Warum sollte das nichts nützen? Man kann zu einem Fenster mit dem Process Explorer auch recht einfach (per drag-n-drop aufs Fenster) die PID ermitteln und kann sich dann dessen Kindprozesse anschauen.

Allerdings ging es ja gar nicht um mehrere Prozesse des Java-Prozesses, sondern nur um einen der von Eclipse aus gestartet wurde. Und auch das läßt sich sehr leicht mit dem PE nachvollziehen.

Gruß
 
Zurück