# JOptionPane.showMessageDialog() mit printStackTace() ?



## magic_halli (7. Aug 2008)

Hi,

ich schreibe für ein CAD-Programm (Pro/ENGINEER) mittels Java verschiedene Anpassungen. In dem CAD-Programm lasse ich mir etwaige Fehlermeldungen mit 'JOptionPane.showMessageDialog' ausgeben:

```
try{

    }catch(Exception err){
      JOptionPane.showMessageDialog( null, "Exception: " + err );
    }
```
Eine andere Möglichkeit der Anzeige von Fehlermeldungen (bspw. System.out.println(...) ) sind hier nicht möglich, da diese im CAD-Programm nicht dargestellt werden - deshalb die Ausgabe von Fehlermeldungen so wie beschrieben!

Leider habe ich jetzt einen Fall, in dem ich auf eine detailiertere Fehlermeldung ala 'printStackTrace()' zurückgreifen will/muß!
Problem: Wie kann ich mir die Ausgabe von 'printStackTrace()' sonst noch grafisch (in einer MessageBox o.ä.) anzeigen lassen (analog JOptionPane.showMessageDialog)???

Die Methode 'JOptionPane.showMessageDialog' erwartet leider völlig andere Argumente, als das ich 'printStackTraxe()' hier verwenden könnte?!


Danke und Gruß


----------



## SlaterB (7. Aug 2008)

gehts dir allein darum, den StackTrace an das JOptionPane zu übergeben?


```
public class Test
{

    public static void main(String[] args)
    {
        try
        {
            recurs();
        }
        catch (Exception e)
        {
            StringWriter sw = new StringWriter();
            PrintWriter w = new PrintWriter(sw);
            e.printStackTrace(w);
            String st = sw.toString();
            JOptionPane.showMessageDialog(null, "Exception: " + st);
        }
    }

    public static void recurs()
    {
        if (Thread.currentThread().getStackTrace().length > 10)
        {
            throw new RuntimeException("recurs");
        }
        recurs();
    }
}
```


----------



## kleiner_held (7. Aug 2008)

Ich kann nur das JXErrorPane von SwingX empfehlen, das handhabt die Darstellung von Exceptions sehr komfortabel.


----------



## magic_halli (7. Aug 2008)

Mir ging es eigentlich nur darum den StackTrace an das JOptionPane zu übergeben...
Mit der Variante von SlaterB klappt das auch wie gewünscht.

Danke und Gruß


----------



## SlaterB (7. Aug 2008)

achte aber darauf, diese x Zeilen Code nicht an verschiedenen Stellen im Programm einzufügen, sondern schreibe dir eine statische Methode
showException(e);
oder ähnlich

-------------

eine andere Taktik wäre, System.out + System.err durch eigene Streams zu ersetzen,
+ im Programm normale Ausgaben zu verwenden (oder gar zu belassen)

was man dann mit den Strings in den eigenen Streams macht ist die zweite Frage,
sie direkt bei den Exceptions auszulesen wäre eher schlechter als mein Vorschlag,
was ganz anderes ist:

die Streams laufen in eigenen Threads, reagieren eigenständig auf neue Ausgaben,
z.B. bei neuen Inhalten maximal 50ms warten und dann alles neue in einen oder mehreren JOptionPanes anzeigen,

wäre ein anderer Ort der Fehlerbehandlung, das normale Programm würde nebenher weiterlaufen


----------



## magic_halli (7. Aug 2008)

> achte aber darauf, diese x Zeilen Code nicht an verschiedenen Stellen im Programm einzufügen, sondern schreibe dir eine statische Methode
> showException(e);
> oder ähnlich


Vielen Dank für die Hinweise und Anregungen... ich werde zum einen Deinen Vorschlag umsetzen und mich mit den Anregungen auseinandersetzen.  :toll: 

Gruß


----------



## thE_29 (7. Aug 2008)

OMFG 
Im überfliegen sehe ich gerade, dass das JXErrorPane ziemlich das gleiche kann wie mein XOptionPane aus meinem XPackage :bae:


----------



## byte (7. Aug 2008)

Das habe ich Dir damals schon in einem anderen Thread gesagt, dass sich einiges von Deinem Kram mit SwingX überschneidet, aber das hast Du wohl getrost ignoriert. :bae:


----------

