Hallo!
Ich hab da mehr so allgemeine Fragen zu meinem konkreten Programm:
Und zwar habe ich eine Klasse, die einen Thread aufruft. Dieser Thread ruft einen Prozess auf, konkret LogParser. Ich behandle keine IO, aber in der run() Methode vom Thread warte ich jede Iteration drauf, dass der Prozess beendet wird.
finishThread setzt finished auf true.
So weit so gut. Jetzt lasse ich aber auch in der aufrufenden Klasse Timertask mit einer Latenz von x Sekunden einen Task laufen, der schaut ob der obige Thread schon finished ist. Wenn nicht, dann ruft er die finishThread() Methode auf, weil ich den TimerTask quasi als Timeout-Tool verwende.
Was passiert jetzt aber wenn der Subprozess vom obigen Thread nicht beendet ist? Läuft dann die finishThread() Methode ins Leere? Was für exceptions sollte ich abfangen und wie soll ich sie behandeln, wenn mein Programm im Fehlerfall weiter machen soll.
Ausprobieren geht leider nicht. Ich kann den externen Prozess nicht dazu bringen so lang zu warten bis die timeout Funktion greift. Was ich bemerkt habe ist unter anderem auch, dass das gesamte Programm nicht terminiert, wenn ich in der aufrufenden Klasse des Threads nicht händisch den Thread am Schluss beende (thread.interrupt()) Find ich komisch.
Ich hab da mehr so allgemeine Fragen zu meinem konkreten Programm:
Und zwar habe ich eine Klasse, die einen Thread aufruft. Dieser Thread ruft einen Prozess auf, konkret LogParser. Ich behandle keine IO, aber in der run() Methode vom Thread warte ich jede Iteration drauf, dass der Prozess beendet wird.
Java:
public void run(){
while(!finished){
try{
Runtime systemShell = Runtime.getRuntime();
Process output = systemShell.exec(
"\"C:\\Programme\\Log Parser 2.2\\LogParser.exe\""
);
output.waitFor();
if(table.getEventId() !=0){
finishThread();
}
}catch (IOException e){
//derpaderp
} catch (InterruptedException e) {
//Derpaderp
e.printStackTrace();
}
}
finishThread setzt finished auf true.
So weit so gut. Jetzt lasse ich aber auch in der aufrufenden Klasse Timertask mit einer Latenz von x Sekunden einen Task laufen, der schaut ob der obige Thread schon finished ist. Wenn nicht, dann ruft er die finishThread() Methode auf, weil ich den TimerTask quasi als Timeout-Tool verwende.
Was passiert jetzt aber wenn der Subprozess vom obigen Thread nicht beendet ist? Läuft dann die finishThread() Methode ins Leere? Was für exceptions sollte ich abfangen und wie soll ich sie behandeln, wenn mein Programm im Fehlerfall weiter machen soll.
Ausprobieren geht leider nicht. Ich kann den externen Prozess nicht dazu bringen so lang zu warten bis die timeout Funktion greift. Was ich bemerkt habe ist unter anderem auch, dass das gesamte Programm nicht terminiert, wenn ich in der aufrufenden Klasse des Threads nicht händisch den Thread am Schluss beende (thread.interrupt()) Find ich komisch.
Zuletzt bearbeitet: