Hallo,
leider konnte ich mit google keine Antwort auf meine Frage finden, womöglich komm ich einfach nicht auf die richtigen Suchwörter.
Ich möchte in einem Exception Handler die Fehlerursache beheben und den fehlgeschlagenen Befehl wiederholen. Zum Beispiel könnte ich mir bei einem I/O Fehler auf eine Diskette vorstellen, daß der Anwender aufgefordert wird, eine andere Diskette einzulegen, um es dann erneut zu versuchen.
Aber wie realisiert man so einen Retry in der Praxis?
Folgendes habe ich mir ausgedacht, hier soll eine Division durch 0 automatisch korrigiert und wiederholt werden:
Das Programm erzeugt folgende Ausgabe:
Aber damit bin ich noch gar nicht zufrieden. Denn eigentlich sollte die Programmiermethode mit Exceptions doch den produktiven Programmcode von den Fehlerbehandlungen separieren, was hier keineswegs mehr der Fall ist. Die Fehlerbehandlung steht mitten in der while Schleife anstatt darunter.
Außerdem, um auf den Fall "DIskette ist nicht beschreibbar", zurück zu kommen: Angenommen das Programm versucht am 95 Stellen, etwas auf Diskette zu speichern. Dann möchte ich die Fehlermeldung mitsamt der Möglichkeit, eine andere Diskette einzulegen und es nochmal zu versuchen, nicht 95 mal programmieren, sondern nur einmal. Das war doch der Sinn von Exceptions, oder?
Also ist meine Frage noch offen: Wie kann ich in einer Exception nach Behebung der Fehlerursache den abgebrochenen Befehl wiederholen?
Ich stelle mir das so vor (in pseudocode)
So einen Exception Handler könnte ich ein einziges mal ins Hauptprogramm schreiben, er könnte dann diese Ausnahme abfangen, egal an welcher Stelle sie auftritt.
Geht das irgendwie?
leider konnte ich mit google keine Antwort auf meine Frage finden, womöglich komm ich einfach nicht auf die richtigen Suchwörter.
Ich möchte in einem Exception Handler die Fehlerursache beheben und den fehlgeschlagenen Befehl wiederholen. Zum Beispiel könnte ich mir bei einem I/O Fehler auf eine Diskette vorstellen, daß der Anwender aufgefordert wird, eine andere Diskette einzulegen, um es dann erneut zu versuchen.
Aber wie realisiert man so einen Retry in der Praxis?
Folgendes habe ich mir ausgedacht, hier soll eine Division durch 0 automatisch korrigiert und wiederholt werden:
Code:
public class Main
{
public static void main(String[] args)
{
System.out.println("Program begin");
int val=0;
while (true)
{
try
{
System.out.println("Trying 3/"+val);
int res=3/val;
System.out.println("The result is "+res);
break;
}
catch (java.lang.ArithmeticException e)
{
System.out.println("Arithmetic error:: "+e.getMessage());
System.out.println("Changing the value to 1");
val=1;
continue;
}
}
System.out.println("Program end");
}
}
Das Programm erzeugt folgende Ausgabe:
- Program begin
Trying 3/0
Arithmetic error:: / by zero
Changing the value to 1
Trying 3/1
The result is 3
Program end
Aber damit bin ich noch gar nicht zufrieden. Denn eigentlich sollte die Programmiermethode mit Exceptions doch den produktiven Programmcode von den Fehlerbehandlungen separieren, was hier keineswegs mehr der Fall ist. Die Fehlerbehandlung steht mitten in der while Schleife anstatt darunter.
Außerdem, um auf den Fall "DIskette ist nicht beschreibbar", zurück zu kommen: Angenommen das Programm versucht am 95 Stellen, etwas auf Diskette zu speichern. Dann möchte ich die Fehlermeldung mitsamt der Möglichkeit, eine andere Diskette einzulegen und es nochmal zu versuchen, nicht 95 mal programmieren, sondern nur einmal. Das war doch der Sinn von Exceptions, oder?
Also ist meine Frage noch offen: Wie kann ich in einer Exception nach Behebung der Fehlerursache den abgebrochenen Befehl wiederholen?
Ich stelle mir das so vor (in pseudocode)
Code:
try
{
schreibe_auf_diskette();
}
catch (diskette_defekt)
{
if (frag_den_anwender("Diskette defekt, bitte lege eine andere Diskette ein","nochmal oder abbruch") == "nochmal")
{
retry_failed_command;
}
}
So einen Exception Handler könnte ich ein einziges mal ins Hauptprogramm schreiben, er könnte dann diese Ausnahme abfangen, egal an welcher Stelle sie auftritt.
Geht das irgendwie?