Swing Threads sollen Tabtitel zur Laufzeit ändern

Netzgeist

Mitglied
Moin,
ein kleines Problem hält mich auf. Vieleicht könnt ihr mir helfen :)

Gegeben ist ein JFrame(den gencode lass ich mal weg):
1.PNG


Darin folgende Methoden:
Java:
public synchronized void incrementVal() {
        val++;
        updateTab();
    }
Java:
private void updateTab() {
        jTabbedPane1.setTitleAt(0, "<html><b>Val:" + val + "</b></html>");
    }
Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        for (int i = 0; i < 5; i++) {
            new Bot(this).start();
        }
    }

Weiterhin gegeben ist die Klasse Bot:
Java:
public class Bot extends Thread {

    private Tabtitle t;

    public Bot (Tabtitle t) {
        this.t = t;
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            t.incrementVal();
        }
    }
}

Wie man sieht versuche ich über den jButton 5 Instanzen von Bot zu starten. Jede dieser Instanzen soll "val" je 10mal erhöhen. Das JFrame soll jeweils den aktuellen Wert von val als Tabtitel darstellen. Zur Laufzeit passiert bei drücken des jButton folgendes:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
        at java.util.Vector.elementAt(Vector.java:427)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.getTextViewForTab(BasicTabbedPaneUI.java:1688)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateTabWidth(BasicTabbedPaneUI.java:1740)
        at javax.swing.plaf.basic.BasicTabbedPaneUI.calculateMaxTabWidth(BasicTabbedPaneUI.java:1758)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateSize(BasicTabbedPaneUI.java:2314)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.minimumLayoutSize(BasicTabbedPaneUI.java:2265)
        at java.awt.Container.minimumSize(Container.java:1651)
        at java.awt.Container.getMinimumSize(Container.java:1636)
        at javax.swing.JComponent.getMinimumSize(JComponent.java:1716)
        at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:2933)
        at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2897)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1315)
        at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2904)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590)
        at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1590)
        at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1568)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1325)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1604)

Mir ist bewusst, das die wechselnde Darstellung des Tabtitels mitunter schneller sein kann als die Wahrnehmung des Benutzers. Der code soll so auch nicht verwendet werden, das hier ist ein simplifiziertes Beispiel für mein Problem.
 

KrokoDiehl

Top Contributor
Aus der Ausnahme deute ich, dass es die setTitleAt()-Methode verreisst. Wann wird der Thread denn ausgeführt? Sofort bei Programmstart oder erst wenn man klickt und man schon alles sieht? Wichtig ist
natürlich, dass die JTabbedPane auch Tabs hat, sonst wird er nichts finden.

Du könntest mal ein vollständiges Beispiel posten oder für's Debugging ein paar Sleeps in den Thread einbauen.
 

Marco13

Top Contributor
Alles, was den sichtbaren Zustand einer Swing-Component verändert, oder darauf basiert, muss vom Event-Dispatch-Thread gemacht werden.
Java:
SwingUtilities.invokeLater(new Runnable()
{
    public void run()
    {
        tabTextÄndern();
    }
});
 

Netzgeist

Mitglied
KrokoDiehl: Der Auslöser ist der jButton.
Marco13: Danke, nach anpassen der Methode in

Java:
private void updateTab() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                jTabbedPane1.setTitleAt(0, "<html><b>Val:" + val + "</b></html>");
            }
        });   
    }

funktioniert der Methodenaufruf. Ich werd mich nun in SwingUtilities einlesen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
G Nochmal Threads und Einfrieren des GUI :( AWT, Swing, JavaFX & SWT 10
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
A Radio Buttons sollen den Text der text Area bestimmen AWT, Swing, JavaFX & SWT 9
O Swing JTable spalten sollen Links stehen AWT, Swing, JavaFX & SWT 5
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
D Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen AWT, Swing, JavaFX & SWT 8
brainray JFileChooser - es sollen nur Ordner wählbar sein AWT, Swing, JavaFX & SWT 2
T Alle Folgefenster sollen im Hauptfenster geöffnet werden AWT, Swing, JavaFX & SWT 3
S [BorderLayout]WEST/EAST sollen über ganze Höhe gehen; AWT, Swing, JavaFX & SWT 3
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
T JMenuBar ausblenden lassen aber Hotkeys sollen erhalten sein AWT, Swing, JavaFX & SWT 2
M 2 gleichberechtigte Fenster sollen miteinander arbeiten AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben