noch eine Frage zum EventDispachThread

Goldfish

Bekanntes Mitglied
Hi, ich habe jetzt noch ein letztes Problem.
Ich habe eigentlich alle wichtigen Stellen mittels

Java:
EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                ...
            }
        });

abgesichert. Es gibt nur eine Stelle, an der ich noch eine ClassCastException provozieren kann, wo ich nicht weiß wieso, da eigentlich alles wichtige im EDT vorhanden sein müsste.

Also ich habe einen Thread, der NICHT an den EDT übergeben wird, stattdessen, ruft dieser immer eine Funktion auf, die ein Objekt in das gezeichnete JPanel in der GUI packt.
Genau dieses panel.add(component) habe ich an den EDT übergeben.
Ungefähr so (die markierten Stellen zeigen die Übergabe and en EDT):

Java:
private void addMovie(final Movie m, final int index, final boolean moveScrollPane){
            
                int page = index / MainComponents.SHOWN_MOVIES;            
                int currentPage = StaticGuiComponents.getCurrentPage();
                if(currentPage == page || this.getComponentCount() < MainComponents.SHOWN_MOVIES){

                    final MoviePanelSmall mps = new MoviePanelSmall(m);
                    final JLayer layer = new JLayer(mps, new MarkedLayerUI());
                    final JComponent content = mps;
                EventQueue.invokeLater(new Runnable(){ //--------------------------------------------
                    @Override
                    public void run() { 
                        if(getComponentCount() == MainComponents.SHOWN_MOVIES){
                            ((MoviePanelSmall)getComponent(getComponentCount()-1)).deleteFromModel();
                            remove(getComponentCount()-1);
                            if(index != -1){ 
                                
                                add(content, index % MainComponents.SHOWN_MOVIES);                                             
                            }else{
                               add(content);
                            }
                        }else{
                            add(content); 
                        }                
                        MainComponents.showComponents();
                        if(moveScrollPane){
                            int position = mps.getLocation().y;
                            scroll.getVerticalScrollBar().setValue(position);
                        }
                    }                
                });//---------------------------------------------------------------------------------
                }                
        }

Jetzt hab ich das Problem, dass wenn ich, während der Thread läuft, der diese Funktion immer wieder aufruft, immer die Exception bekomme, wenn ich auf genau einem der MoviePanelSmall, die hier hinzugefügt werden, den MouseListener aktiviere. Also die Klasse MoviePanelSmall implementiert den MouseListener und via Doppelklick wird dann ein neuer Tab hinzugefügt in das JTabbedPane, in welchem sich auch das MainPanel befindet, wo die Komponenten aus der add-method eingefügt werden.

Dafür hatte ich mich auch von JTabbedPane abgeleitet und eine addNewTab-Methode geschrieben, die an der entsprechenden Stelle auch an den EDT übergeben wird. Trotzdem erhalte ich bei dieser Aktion ständig eine ClassCastException.
Ich habe auch schon zur Laufzeit mittels System.out.println(SwingUtilities.isEventDispatchThread()); überprüft, ob zum gegebenen Zeitpunkt alles im EDT ist. Dies scheint der Fall zu sein, nur dass die Komponenten zum Zeitpunkt ihrer Erzeugung halt nicht im EDT sind, was sie ja auch nicht sein sollen. Also die Komponenten werden zusammengeklemmpnert auch Bilder dazu, die in JPanels gezeichnet werden (wo die ClassCastExceptions auch immer rauf zu verweisen scheinen aber eine übergabe an den EDT hilft nicht an den Stellen) und erst dann werden sie an das gezeichnete Panel übergeben, wo die oben genannte Funktion halt für aufgerufen wird. Wenn ich währenddessen aber noch ein anderes Objekt an den EDT übergebe, scheint es Probleme zu geben...

Ich hoffe, dass ich mein Problem verständlich machen konnte und hoffe, dass mir da jemand weiterhelfen kann. Danke schonmal
 

xehpuk

Top Contributor
Dies scheint der Fall zu sein, nur dass die Komponenten zum Zeitpunkt ihrer Erzeugung halt nicht im EDT sind, was sie ja auch nicht sein sollen.
Doch, sollen sie.

Die Zeilen vor deinem
Code:
invokeLater()
gehören auch in den EDT. Am besten rufst du die Methode einfach immer im EDT auf:
Java:
EventQueue.invokeLater(new Runnable() {
	@Override
	public void run() {
		addMovie(…);
	}
}
 

Goldfish

Bekanntes Mitglied
Doch, sollen sie.

Die Zeilen vor deinem
Java:
invokeLater()
gehören auch in den EDT. Am besten rufst du die Methode einfach immer im EDT auf:

Hier bekomm ich aber das Problem, dass die gesamte GUI lahm gelegt wird, wenn ich das alles in den EDT werfe... und das dann auch ganz gerne mal für gut 20 bis 30 Sekunden hängt von einer anderen Variable ab.
Das ist allerdings nicht gerade erwünscht. Dazu würde ich dann doch gerne fragen, wieso der Rest denn auch in den EDT soll? Ich hatte angenommen, dass dies nur kritisch wäre, wenns um Veränderungen in der GUI direkt geht, wo auch gezeichnet werden muss. Das ist vorher ja noch nicht der Fall. Daher bin ich mri da nicht ganz sicher. Problematisch ist hier sicherlich auch, dass ich nicht den exakten Ablauf kenne, den Java da intern durchgeht. Ich weiß nicht, wonach ich suchen soll, wenn ich dieses Infos haben will. Würde bestimmt eher helfen die ClassCast nachzuvollziehen, wenn ich weiß, wie genau vorgegangen wird.


@kaetzacoatl
java.lang.ClassCastException
getComponent() liefert kein MoviePanelSmall

Wäre schön, wenns das wäre. Mene ClassCast hängt definitiv mit dem EDT zusammen, das ist ohne Zweifel.
 

bERt0r

Top Contributor
Vergiss dieses getComponent, das ist unschön und macht dir nur Probleme. Speicher dein MoviePanel doch in einer Variable und übergib sie deinem Thread/deiner Funktion.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Es bleibt immer noch eine Javaw instanz zurück AWT, Swing, JavaFX & SWT 3
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
K Wie kann ich noch den scale bekommen, außer mit getScaleX oder getScaleY? AWT, Swing, JavaFX & SWT 1
P Swing GUI noch nicht gezeichnet - Logik läuft - blockiert AWT, Swing, JavaFX & SWT 3
P Swing Nach removeAll() noch 1 Element vorhanden AWT, Swing, JavaFX & SWT 0
D SWT TreeViewer: Daten aus Model gelöscht... trotzdem noch im Baum AWT, Swing, JavaFX & SWT 4
B Swing Noch ein Zeichenprogramm... AWT, Swing, JavaFX & SWT 19
R Noch einmal x^2 bzw. parabel AWT, Swing, JavaFX & SWT 2
V Swing Neue Größe bei ComponentListener noch nicht verfügbar? AWT, Swing, JavaFX & SWT 3
S 3D-Grafik Java3D und was noch? AWT, Swing, JavaFX & SWT 3
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Nicer LookAndFeel Suche noch LaFs AWT, Swing, JavaFX & SWT 7
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
M SWT Mutter-Shell blocken während Tochter-Shell noch offen ist AWT, Swing, JavaFX & SWT 6
R noch ein DoubleBuffering Noob AWT, Swing, JavaFX & SWT 10
S Swing noch nicht übergebenen Wert aus JComboBox auslesen AWT, Swing, JavaFX & SWT 4
S Swing Fenster schliessen, javaw noch im Speicher AWT, Swing, JavaFX & SWT 5
U JList mit Hintergrundbild hinterlegen und noch ne Frage AWT, Swing, JavaFX & SWT 4
S Weder ActionListener noch Graphics wollen so recht AWT, Swing, JavaFX & SWT 3
G JTree mouseClicked -> kontrolle ob noch ein unterknoten e AWT, Swing, JavaFX & SWT 2
A Noch mal Zusammenarbeit Java und HTML AWT, Swing, JavaFX & SWT 4
A Noch mals Probleme mit Login AWT, Swing, JavaFX & SWT 3
G Text eines noch aktiv editierten Textfeldes lesen AWT, Swing, JavaFX & SWT 2
H Noch einmal JList (nichts auswählen) AWT, Swing, JavaFX & SWT 2
C AWT, Swing & was sonst noch. AWT, Swing, JavaFX & SWT 11
E Toturial weg! Hat noch wer ne Kopie! AWT, Swing, JavaFX & SWT 3
U sporadisches Deadlock und noch ein Schmankerl ;) AWT, Swing, JavaFX & SWT 9
H Swing nach schließen noch sichtbar AWT, Swing, JavaFX & SWT 4
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
Lukas2904 Wie speicher ich eine Einstellung? AWT, Swing, JavaFX & SWT 1
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
F Variablen an eine Form binden? AWT, Swing, JavaFX & SWT 2
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
A eine Fehler AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J JavaFX Die Webview stellt eine Webseite nicht dar AWT, Swing, JavaFX & SWT 0
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
Thallius Swing JDatePicker oder Sucht jemand eine Aufgabe? AWT, Swing, JavaFX & SWT 0
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
A JFace Wizard: Ist es möglich eine Page zu löschen? AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
U LookAndFeel für eine Komponente AWT, Swing, JavaFX & SWT 2
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
M Über eine JMenuBar überprüfen ob ein JCheckBoxMenuItem selectiert ist. AWT, Swing, JavaFX & SWT 4
M Wie kann ich eine an Apple Automator angelehnte GUI erstellen? AWT, Swing, JavaFX & SWT 1
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
C Swing Durch Inhaltsänderung eines JTextfields eine Funktion aufrufen AWT, Swing, JavaFX & SWT 5
G 2D-Slider bzw. eine graphische Auswahlkomponente die sich so verhält AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben