Fehlerbehandlung und Überwachung

Der Benutzer ist mit der DLE in der Lage, erwartete Fehler, die während eines Brickablaufs auftreten können, abzufangen und darauf zu reagieren.
Zu diesem Zweck gibt es ein Kommando „Fehlerüberwachung“, welches ein Block-Kommando darstellt und bei einem Fehler im Abschnitt „Start“ zur Behandlung in den Abschnitt „Behandlung" springt.

Vorhandene Variablen

Um aufgetretene Fehler zu verwerten, stehen folgende Variablen zur Verfügung:

  • $Fehlertyp: Die Art des Fehlers
  • $Fehlermeldung: Die Meldung des Fehlers (siehe dazu auch Java Exception-Klassen)
  • $Fehlertrace: Eine detaillierte Fehlermeldung, die die technische Ursache aufzeigt. (siehe auch Java Stack Trace)

Beispiel: Datei lesen verursacht Fehler (Fehlerüberwachung allgemein, Fehlerweiterleitung)

In diesem Beispiel wird versucht, Stati aus einer Excel-Datei zu lesen und dem ToDo mit der ID 1.000 nacheinander diese Stati zuzuweisen.
Die URL des Excel-Files ist jedoch ungültig und es tritt ein Fehler auf.

Zeile 2: Die Fehlerüberwachung startet mit dem Einfügen des Kommandos „Fehlerüberwachung“. Das Grundgerüst besteht aus dem Root-Command „Fehlerüberwachung“, dem Start-Abschnitt (Zeile 3), dem Behandlungs-Abschnitt (Zeile 7) und dem Ende-Block (Zeile 17).

Zeile 4: Wir versuchen, die Datei von einer ungültigen URL zu lesen. Dieses Kommando verursacht einen Fehler und wir springen zum Behandlungs-Abschnitt.

Zeile 8: Die Fehlerbehandlung beginnt mit der Abfrage, mit welcher Fehlerart wir es zu tun haben. In diesem Fall handelt es sich um eine UnknownHostException – wir haben diesen Fehler erwartet, teilen es dem Benutzer mit und brechen ab. (Zeile 10).

Zeile 12: Wurde eine andere Fehlerart verursacht, schreiben wir ein Fehlerprotokoll, in dem wir den Fehlertyp und die Meldung vermerken. Danach geben wir den Fehler an die DLE zur Verarbeitung weiter. Die DLE wird den Brick dann abbrechen. (Zeile 15).

In diesem Beispiel wird die verschachtelte Fehlerüberwachung demonstriert. Es ist möglich, Fehlerbehandlungen innerhalb von Fehlerbehandlungen durchzuführen.

In Zeile 2 beginnt die erste Fehlerüberwachung, in Zeile 4 die nächste. In Zeile 6 wird innerhalb des zweiten Überwachungsblocks ein Fehler verursacht, der in Zeile 7 sofort wieder gefangen wird.
In Zeile 11 beginnt der Behandlungs-Abschnitt der ersten Überwachung. Dieser Abschnitt würde nicht ausgeführt werden, wenn nicht in Zeile 10 ein weiterer Fehler („Nummer 2“) erzeugt werden würde. Da der Fehler („Nummer 1“) im zweiten Überwachungsblock bereits behandelt (Zeile 8) nicht aber an die DLE (bzw. in diesem Fall an die nächste Überwachungsebene) weitergeleitet wurde, wäre der Fehler behandelt und der Behandlungsblock der äußeren Überwachung (Zeile 11) würde nicht aufgerufen werden.
Die Meldung aus Zeile 12 lautet „Aktueller Fehler: Nummer 2“.
In Zeile 13 beginnt eine weitere Überwachung. Der Fehler aus Zeile 15 wird in Zeile 16 gefangen, in Zeile 17 ausgegeben („Aktueller Fehler: Nummer 3“) und der Block ist abgehandelt.
Die Meldung in Zeile 19 allerdings lautet wieder auf „Nummer 3“: Die Fehlervariablen beinhalten jeweils nur die Werte des letzten aufgetretenen Fehlers. Da Nummer 3 nach Nummer 2 aufgetreten ist, wurden die Werte überschrieben, obwohl sich Nummer 3 in einem abgeschlossenen Block befand.