Fehlerbehandlung

Status
Nicht offen für weitere Antworten.

nettchen

Aktives Mitglied
Hallo,

bin noch relativ neu in Java und das ist meinerstes größeres Projekt( ein Eclipse RCP also SWT Und JFace statt wie bisher Swing)
Jetzt hab ich mal eine Frage zur fehlerbehandlung.

Da ja bei mir in den verschiedensten fällen fehler auftreten können, (meine jetzt aber nicht solche fehler wie irgendetwas null oder Datei nicht gefunden) für die es ja exceptions klassen gibt, sondern Programmspezifische exceptions wie name icht gefunden, falscher status oder so etwas.

Jetzt habe ich mir überlegt ich erstelle mir eine Klasse ModelExceptions die von Exceptions erbt. Und ein Interface Errormessages das zu einem fehlercode eine message enthält

So und jetzt ein Bsp. Ich rufe über ein menu eine aktion auf. diese ruft eine methode meines modells auf. in dieser methode tritt ein fehler auf. Dann wirft diese methode eine Modellexception mit dem jeweiligen fehlercode. und die actionklasse fängt die exception auf und wertet diese je nach fehlercode aus. also gibt messagebox mit fehler zurük und behandelt das prolem.

ist das so richtig. wie gesagt habe bisher in meinen programmen kaum fehlerbehandlung drin und weiß deshalb nicht so recht wie ich da ran gehen soll. Oder gibt es bessere vorgehnsweisen.

Also sollte ich die fehlermeldungen im model auswerten. habe nämlich ach noch das problem das fast alle fehlermeldungen in einer datei protokolliert werden sollen. Allerdings weiß ich noch nicht wieich das mache. weil ich das eigentlich irgendwo zentral machen wollte.
Und deswegen vielleicht nicht in jeder actionklasse einzeln?
 

JPKI

Top Contributor
Generell ist das so in Ordnung. Wenn du die Fehler protokollieren willst, erstell irgendwo eine statische Methode wie folgende (so mach ich's immer):
Code:
public static void log(Throwable th) {
 System.err.println(th.getClass().getName() + " occured at " + new java.util.Date());
 th.printStackTrace(System.err);
}
 

JPKI

Top Contributor
Gegenfrage: Warum nicht selbst machen, wenn's so einfach ist?
Nachtrag: Ich leite den System.err-Stream immer in einen ByteArrayOutputStream um, und gebe der Runtime einen Shutdown-Hook-Thread, der das ganze dann in eine Datei schreibt.
 

nettchen

Aktives Mitglied
Was sind denn das für programme und wo finde ich etwas darüber, wenn möglichst in deutsch und kann ich die einfach in mein programm einbauen also sind die lizenzfrei?
 

JPKI

Top Contributor
Ich geb mal meinen Code:

LogManager.java
Code:
import java.io.*;
public class LogManager {

private static ByteArrayOutputStream stream;

static {
 stream = new ByteArrayOutputStream();
 System.setErr(new PrintStream(stream));

 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
  public void run() {

    if (stream.toByteArray().length < 2)
     return;
    try {
     PrintStream pStream = new PrintStream(new FileOutputStream("error.log",true));
     pStream.print(new String(stream.toByteArray()));
     pStream.close();
   } catch (Exception ex) {}
  }
 }));
}
private LogManager() {}

public static void log(Throwable th) {
System.err.println(th.getClass().getName() + " occured at " + java.util.Locale());
th.printStackTrace(System.err);
}

Dann brauchst du in deinem Code nur noch die Log-Methode aufzurufen:

Code:
try { //Irgendwas Abartiges } catch (Exception ex) { LogManager.log(ex); }
 

nettchen

Aktives Mitglied
oh danke, jetzt denk ich bekomm ichs hin, und noch ne frage zur struktur, würdest du das loggen in den einzelnen gui controllern oder im modell abwickeln, wo ie fehler auftreten?
 

nettchen

Aktives Mitglied
noch mal eine andere frage. In der von mir erstellten exception Klasse habe ich jetzt nur die zwei konstruktoren drin also der leere und der mit einem string als paramter, der den konstruktor der superklasse aufruft. sonst haben ich da nix drin. Fehlt da noch was und sollte in die konstruktoren noch etwas zusätzlicher code

*edit* hatte vergessen zu erwähnen das ich von der exception klasse spreche
 

JPKI

Top Contributor
Nö. Wenn du selbst nur den String-Konstruktor oder den Standardkonstruktor benutzt, warum sollst du dann noch weitere Konstruktoren hinzufügen?
 

nettchen

Aktives Mitglied
na hab mich nur gewundert weil die exception Klasse nur so kurz ist, und dachte das ich irgendwas vergessen habe
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben