JOptionPane.showMessageDialog() mit printStackTace() ?

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
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:
Code:
    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ß
 
gehts dir allein darum, den StackTrace an das JOptionPane zu übergeben?

Code:
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();
    }
}
 
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ß
 
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
 
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ß
 
OMFG 😉
Im überfliegen sehe ich gerade, dass das JXErrorPane ziemlich das gleiche kann wie mein XOptionPane aus meinem XPackage :bae:
 
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:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben