Swing Frage zu invokeAndWait() Exceptions

hdi

Top Contributor
hey leute,

Diese ganze EDT Geschichte schafft es leider selbst nach jahren noch immer mich manchmal zu verwirren :D wenn man ein invokeAndWait hat dann können da ja 2 Exceptions fliegen:

Java:
		try {
			SwingUtilities.invokeAndWait(new Runnable() {
				@Override
				public void run() {
				
				}
			});
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


Ich hab so ein invokeAndWait grad im Code und jetzt würde ich gern per JOptionPane.showXXX() ne Meldung anzeigen wollen wenn eine Exception fliegt. Und da ja auch diese Klasse/Methode nicht thread-safe ist und und von Swing kommt sollte man den Code ja wiederum per invokeLater auf den EDT legen. Frage: Hab ich dann ein Deadlock? Ich weiß nämlich nich genau was ich mir unter den Exceptions vorstellen soll, also was "geht ab" mit dem EDT wenn so ne Exception fliegt?

Testen kann ich das leider nicht, denn ich kann die Effekte ja nich ausm Hut ziehen die da beim EDT passieren wenn sowas tatsächlich auftritt..

Generell noch ne Frage zu JOptionPane: Muss man das eig auf den EDT legen? Immerhin kann es doch bei diesen Dialogen nich wirklich dazu kommen das 2 Threads darauf zugreifen. Aber wer weiß schon was da sonst alles unter der Haube passiert wenn man die Methoden aufruft...

Danke für Antwort!
 

Marco13

Top Contributor
hey leute,
Testen kann ich das leider nicht, denn ich kann die Effekte ja nich ausm Hut ziehen die da beim EDT passieren wenn sowas tatsächlich auftritt..

Du meinst etwas, was darüber hinausgeht, dass man Thread.interrupt() aufruft unt die Exception per Hand wirft? (Die InvocationTargetException wickelt ja nur andere Exceptions ein...)
 

hdi

Top Contributor
Du meinst etwas, was darüber hinausgeht, dass man Thread.interrupt() aufruft unt die Exception per Hand wirft?

Ja das ist halt die Frage, ob da nich noch mehr passiert. Ich bin mir halt nich wirklich sicher, ob das so iO ist mit nem JOptionPane per invokeLater im catch block. Wer weiß in welchem Zustand sich der EDT gerade befindet, wenn du verstehst was ich meine. Ist für mich grad nich wirklich transparent..
 

hdi

Top Contributor
Danke, aber ich finde den Artikel etwas seltsam bzw verstehe ihn nicht. Er hat da ne ThreadGroup gemacht bei der geworfene Exceptions von Threads immer behandelt werden, ist ja ganz nett, aber was hat das jetzt mit dem EDT zu tun? Er führt seinen Code doch gar nich auf dem EDT aus? ???:L D.h. er ignoriert doch total die Existenz des EDT und die Tatsache dass GUI Code darauf ausgeführt werden sollte, oder peil ich das nur nicht?
 

Marco13

Top Contributor
Also die ganzen Dinge, die die Exceptions auslösen, werden ja schon auf dem EDT gemacht. Und wenn dort eine Exception fliegt, dann stirbt der EDT, bis ein neuer Event verarbeitet werden muss.
Oder meinst du, dass das showMessageDialog nicht auf dem EDT gemacht wird? Dort wird ein modaler Dialog angezeigt, für den quasi ein neuer EDT gestartet wird, d.h. das kann von jedem Thread aus gemacht werden.
 

hdi

Top Contributor
Also die ganzen Dinge, die die Exceptions auslösen, werden ja schon auf dem EDT gemacht.
Ja eben, aber was bringt ihm dann seine ThreadGroup? Ich verstehe nicht wieso die uncaughtException() Methode seiner ThreadGroup ausgelöst werden sollte wenn es doch der EDT ist, der die Exception wirft, und nicht der Thread, den er in diese ThreadGroup gelegt hat. Verstehst du was ich meine. Wo ist die Verbindung, wieso funktioniert das so wie ers im Artikel sagt? die acitonPerformed() wird vom EDT ausgeführt, nicht von dem Thread wo er den Code mit der GUI usw drin hat. Wenn da ne Exception fliegt, wieso kommt die plötzlich in irgendeiner Methode von irgendeiner ThreadGroup an?
 

Marco13

Top Contributor
Die ThreadGroup eines Threads ist standardmäßig die gleiche, wie von dem Thread, die den Thread erzeugt - in diesem Fall würden also alle EDT Threads zu der ThreadGroup gehören, die dort erstellt wird.

Wobei eigentlich das Erstellen der Gui-Components schon auf dem EDT stattfinden sollte. D.h. eigentlich müßte man DAS nochmal in die SwingUtilities einwickeln...
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BetterGui
{
    public static void main(String[] args)
    {
        ThreadGroup exceptionThreadGroup = new ExceptionGroup();
        new Thread(exceptionThreadGroup, "Init thread")
        {
            public void run()
            {
                SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                    {
                        Gui gui = new Gui();
                        gui.pack();
                        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        gui.setVisible(true);
                    }
                });
            }
        }.start();
    }
}

class Gui extends JFrame
{
    public Gui()
    {
        super("GUI Example");
        final JTextArea text = new JTextArea(14, 30);
        getContentPane().add(new JScrollPane(text));
        getContentPane().add(new JButton(new AbstractAction("Calculate")
        {
            private int countdown = 3;

            public void actionPerformed(ActionEvent e)
            {
                text.append("Event Queue Thread: " +
                    System.identityHashCode(Thread.currentThread()) +
                    " Group: " + Thread.currentThread().getThreadGroup());
                text.append("\n");
                if (--countdown <= 0)
                {
                    throw new IllegalArgumentException();
                }
            }
        }), BorderLayout.NORTH);
    }
}

class ExceptionGroup extends ThreadGroup
{
    public ExceptionGroup()
    {
        super("ExceptionGroup");
    }

    public void uncaughtException(Thread t, Throwable e)
    {
        JOptionPane.showMessageDialog(findActiveFrame(), e.toString(),
            "Exception Occurred", JOptionPane.ERROR_MESSAGE);
        e.printStackTrace();
    }

    /**
     * I hate ownerless dialogs. With this method, we can find the currently
     * visible frame and attach the dialog to that, instead of always attaching
     * it to null.
     */
    private Frame findActiveFrame()
    {
        Frame[] frames = JFrame.getFrames();
        for (int i = 0; i < frames.length; i++)
        {
            Frame frame = frames[i];
            if (frame.isVisible())
            {
                return frame;
            }
        }
        return null;
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben