Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose()

Hachmed

Aktives Mitglied
Hallo!
Der Titel besagt quasi schon alles.
Ich habe einen JDialog den ich schließen möchte mit
setVisible(false) oder
dispose()

Das Schließen wird durch den Klick durch einen Button ausgeführt.
Wenn der Button geklickt wird, werden mehrere Aktionen ausgeführt, zuletzt das Schließen des Dialogs, aber alle vorherigen werden ausgeführt.
Zum Test habe ich eine Zeile vor besagtem Befehl einen System.out.println() Befehl plaziert, der ausgeführt wird, danach dann das Windows-übliche(Keine Rückmeldung) im Fenstertitel.

Das wirklich Eigenartige: Lasse ich das Programm (mit Netbeans) im Debug-Modus laufen, funktioniert alles. Lasse ich es nur durch "run" laufen, der crash.

Hier noch ein Screenshot:
axmcfik4.png


Hatte schon mal jemand ein ähnliches Problem / einen Tipp?
 
Ich habe einen JDialog den ich schließen möchte mit
setVisible(false) oder
dispose()

Das Schließen wird durch den Klick durch einen Button ausgeführt.
Wenn der Button geklickt wird, werden mehrere Aktionen ausgeführt, zuletzt das Schließen des Dialogs, aber alle vorherigen werden ausgeführt.

Den JDialog schliesst man mit dispose(). Zeig doch mal, welche Aktionen da vor dem Schliessen ausgeführt werden.
 
Okay, also dann mit dispose (funktioniert wie gesagt nicht).
Der Code selbst ist nicht sehr aussagekräftig 🙂.

Java:
topTexture = topButton.getTexture();
bottomTexture = bottomButton.getTexture();
northTexture = northButton.getTexture();
southTexture = southButton.getTexture();
eastTexture = eastButton.getTexture();
westTexture = westButton.getTexture();
Spatial sky = SkyFactory.createSky(sceneApplication.getAssetManager(), westTexture, eastTexture, northTexture, southTexture, topTexture, bottomTexture);
sceneApplication.setNextAttached(sky);
System.out.println("Bis hier hin geschafft");
dialog.this.dispose();

Folgendes geschieht:
Variablen werden Werte (Texturen) zugeschrieben
Ein Spatial (3D-Object in der JMonkeyEngine) wird erstellt und per Setter-Methode einer anderen Klasse bekannt gemacht.
Danach der System.out - Befehl, der auch ausgeführt wird.

EDIT: Okay, der Debug-Modus tuts auch nicht mehr... Mal eben alles was ich über den Fehler zu wissen glaubte über Bord geworfen 🙁
 
Zuletzt bearbeitet:
Hmm, keine Ahnung, was bei den Aktionen vor dem dispose passiert, aber das sieht etwas komisch aus:
[JAVA=10]dialog.this.dispose();[/code]

Müsste es nicht entweder
Code:
dialog.dispose()
oder
Code:
this.dispose()
heissen, je nachdem wo dies aufgerufen wird?

Was ist dieses dialog denn genau? Wo kommt das her? Wie und wo wird der Dialog erzeugt? Und wo stehen diese oben gepostete Codezeilen denn?
 
Die Dialog.this.dispose(); Methode sieht deshalb so aus, weil sie in einem ActionListener ausgeführt wird.
Nur this wäre in diesem Falle der ActionListener
Java:
.addActionListener(new ActionListener(){
bla
bla
bla
Dialog.this dispose();
});
Habe das Problem jetzt lösen können, obgleich ich immer noch nicht weiß, was sein Ursprung war.
statt
Java:
okButton.addActionListener(new ActionListener()
        {

            public void actionPerformed(ActionEvent e)
            {
                    topTexture = topButton.getTexture();
                    bottomTexture = bottomButton.getTexture();
                    northTexture = northButton.getTexture();
                    southTexture = southButton.getTexture();
                    eastTexture = eastButton.getTexture();
                    westTexture = westButton.getTexture();
                    Spatial sky = SkyFactory.createSky(sceneApplication.getAssetManager(), westTexture,                                                                                                                          eastTexture, northTexture, southTexture, topTexture, bottomTexture);
                    sceneApplication.setNextAttached(sky);
                    System.out.println("Bis hier hin geschafft");
                    Dialog.this.dispose();});
sieht der Code jetzt so aus:
Java:
okButton.addActionListener(new ActionListener()
        {

            public void actionPerformed(ActionEvent e)
            {
                Dialog.this.dispose();
                topTexture = topButton.getTexture();
                bottomTexture = bottomButton.getTexture();
                northTexture = northButton.getTexture();
                southTexture = southButton.getTexture();
                eastTexture = eastButton.getTexture();
                westTexture = westButton.getTexture();
                Spatial sky = SkyFactory.createSky(sceneApplication.getAssetManager(), westTexture, eastTexture, northTexture, southTexture, topTexture, bottomTexture);
                sceneApplication.setNextAttached(sky);
            }
        });
Der dispose-Befehl kommt in die erste Zeile in der actionPerformed - Methode...
Keine Ahnung, warum es jetzt funktioniert,
danke für die Antworten!
 

Zurück
Oben