Möglich einen Fatal Error abzufangen und darzustellen?

ThirdKeeper

Mitglied
Hallo zusammen!

Ist es möglich eine unvorhersehbare Exception aus einer Rich-Client Anwendung abzufangen und einem User an zu zeigen?

Wenn z.B. ein Objekt null ist (oder ein anderer Fehler ausserhalb eines try, catch) und dann eine NullPointerException aus löst, worauf hin nicht ersichtliche Fehler im Client auftreten (können).

Hierzu würde ich gerne dem User mitteilen, dass hier ein Fehler aufgetreten ist
und im schlimmsten Fall soll die Anwendung geschlossen werden.

Jemand eine Idee?
Und kommt mir nicht mit try, catch! ;)
 
Hab da einen Ansatz gefunden der teilweise funktioniert.
Teilsweise bedeutet, so lang kein Modaler Dialog über den JFrame
eine Exception wirft.

Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class ExceptionThread
extends JFrame
implements Runnable{
    private Thread thread = null;
   
    public ExceptionThread(){
        initExceptionThread();
    }

    public void run() {}

    public static void main(String [] args){
        new ExceptionThread();
    }

    private void initExceptionThread() {
        initUI();
        thread = new Thread(this);
        Thread.setDefaultUncaughtExceptionHandler(
             new Thread.UncaughtExceptionHandler() {
                  public void uncaughtException(Thread t, Throwable e) {
                        System.out.println("UncaughtException: "+ e.getMessage());
             }
        });
        thread.start();
    }

    private void initUI(){
        Container cont = this.getContentPane();
        cont.setLayout(new BorderLayout());
        JButton button = new JButton("Throw Exception");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                throw new ArithmeticException();
            }
        });
        cont.add(button, BorderLayout.CENTER);
        pack();
        setVisible(true);
    }
}
 
Zuletzt bearbeitet:
Zurück