Dialog einblenden bei NullPointerException

Sneakizzel

Mitglied
Hallo,

wenn in meinem Programm eine NullPointerException (oder eine andere) fliegt bekommt der User davon nix mit, ausser dass das Programm halt nicht korrekt funktioniert.

Ich würde die gerne abfangen und dem User per Dialog (JOptionPane) mitteilen das es einen Fehler gab.
Ich hab keine Ahnung wie und ob das überhaupt geht.

Grüße sneakizzel
 
du müsstest bei jeder aktion die vom user aufgerufen wird einen try-catch block machen. das ganze könntest du natürlich kapseln und könnte so ausschauen:

Java:
//button druck...
button.addActionListener(new ShowErrorActionListener(){
  public void action(ActionEvent e){
    //hier kommt das rein, was normalerweise in der actionPerformed passiert
  }
});

und die dazugehörige Klasse:
Java:
public abstract class ShowErrorActionListener implements ActionListener{
  public void actionPerformed(ActionEvent e){
    try{
      action(e);
    }catch(Exception ex){
      //JOptionPane....
    }
  }

  public abstract void action(ActionEvent e);
}
 
Ich mach das immer so:


Java:
public static void exception_dialog(JLabel expl) {
		d = new JDialog();
		JPanel dp = new JPanel(new GridLayout(2, 1, 5, 5));
		btn_OK = new JButton("Ok");
		dp.add(expl, BorderLayout.NORTH);
		dp.add(btn_OK, BorderLayout.SOUTH);
		d.add(dp);
		btn_OK.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				d.dispose();
			}
		});
		d.setTitle("Ungültige Eingabe");
		d.setLocation(550, 500);
		d.setResizable(false);
		d.pack();
		d.setModal(true);
		d.setVisible(true);
		d.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}


Dem fenster gebe ich jeweils die Fehlerangabe als Label mit.

also für dein Problem:


Java:
JLabel exception_nullpointer_inf = new JLabel("Das Programm versucht auf eine Element zuzugreifen, welches nicht existiert");
try {
		// Exception auslösen
                int [] boeserArray = new int [2];
                System.out.println(boeserArray [10]);

		} catch (NumberFormatException e) {
			exception_dialog(l_exception_false);
		}
 
Okay, ich dachte eher an Fehler die beim Programmieren entstehen und vom Programmierer nicht erkannt wurden, die also erst dem User auffallen.

Ich könnte natürlich jede Methode mit einer throws Declaration ausstatten und diese dann in der "obersten" Methode auswerten ... ich meine aber mal gehört zu haben dass dies nciht gemacht werden soll, warum kann ich aber nicht mehr sagen :-(

Grüße sneakizzel
 
Wenn mann so möchte ja, aber nur ausgewählte! Wenn ich jetzt den System.err umleite würde ich ja alle Exceptions in diesem Fenster/Dialog sehen auch die die ich erwarte und abfangen kann ohne das das Programm/der User davon gestört wird.

Ich müsste mitbekommen wenn etwas auf den PrintStream von System.err draufgeschrieben wird, dieses analysieren und bspw. bei NullPointerException das im Fenster ausgeben. Hmm ob so etwas geht?
 

Zurück
Oben