Aktion ausführen wenn Frame disposed wurde

Alex_99

Mitglied
Hallo, ich bin momentan dabei einen Taschenrechner mit History und GUI zu programmieren. Die History funktioniert soweit, nur bekomme ich es bislang nicht hin, dass die Aktion in der Klammer der Rechnerfunktion auf Anhieb durchläuft..

Rechnerfunktion:
showHistoryButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
History_GUI.main(null);
if (History_GUI.changeText == true){
Speicherfeld.setText(answer);
TextField.setText(null);
System.out.println("Aktion ausgeführt");
panel1.repaint();
History_GUI.changeText = false;
}
}
});
Historyfunktion:
loadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
set(null);
}
public void set(String[] args) {
String selected =list1.getSelectedValue().toString();
Rechner_GUI.answer = selected;
changeText = true;
}
});

Das Ziel ist, dass wenn der Load Button in der History Klasse geklickt wird und sich der Frame entsprechend schließt, der Wert an die Rechnerfunktion übergeben wird und sofort angezeigt wird. Leider führt er die Aktion erst dann aus, wenn ich erneut auf den ShowHistory Button im Rechner klicke, wenn der Frame aus der Historyfunktion disposed wurde.

Wie kann man das lösen und woran könnte es liegen?
 

KonradN

Super-Moderator
Mitarbeiter
Ich nehme an, dass History_GUI.main() einfach nur das neue Fenster öffnet. Da kannst Du aber doch nicht direkt weiter machen. Diese Oberflächen arbeiten ja Event-Orientiert und das musst du dann auch entsprechend abbilden. Was da halt passiert ist: Das Fenster wird geöffnet und direkt danach kommen die nächsten Anweosungen - ehe der User irgendwas machen konnte.

Was denkbar wäre: Es gibt modale Dialoge - wenn das andere also ein Dialog ist und dieser modal, dann würde man damit erzwingen, dass der User erst den Dialog beenden muss, ehe es weiter geht in der eigentlichen Ausführung.

Die Alternative ist, dass man mehrere Fenster hat und diese sich auch Events schicken können. Das wäre dann z.B. über das Oberserver Pattern machbar. Wenn man keine eigenen, neuen Interfaces haben will, dann wäre da auch PropertyChangeListener mit PropertyChangeEvent nutzbar.

Und täuscht der Eindruck oder hast Du da noch viel statische Elemente? Davon solltest Du weg kommen und statt dessen vernünftig mit Instanzen arbeiten.
 

Alex_99

Mitglied
Das mit den statischen Elementen werde ich noch anpassen.

Was ich gerade versuche ist das mit Threads zu realisieren. Leider jedoch auch ohne Erfolg.

Die Idee ist einen neuen Thread auszuführen und diesen dann zu beenden. Wenn der Thread beendet wurde soll der Code ausgeführt werden.

Rechner:

Code:
 showHistoryButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Thread t1 = new Thread();{
                        History_GUI.main(null);}
                t1.start();
                if (!t1.isAlive())
                {
                    if (History_GUI.changeText){
                        Speicherfeld.setText(answer);
                        TextField.setText(null);
                        System.out.println("Aktion ausgeführt");
                        panel1.repaint();
                        History_GUI.changeText = false;
                    }
                }
            }
        });

Historie:
Code:
loadButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                set(null);
            }
            public void set(String[] args) {
                String selected =list1.getSelectedValue().toString();
                Rechner_GUI.answer = selected;
                changeText = true;
                Thread.currentThread().interrupt();
                frame.dispose();
            }
        });

irgendeine Idee warum der Ansatz nicht funktioniert?
 

KonradN

Super-Moderator
Mitarbeiter
Also das wird noch dubioser. :)

Swing UI sollte komplett im UI Thread stattfinden. Da bringt es relativ wenig, weitere Threads zu erstellen. Und auch da ist mir unverständlich, was Du da versuchst:
  • Du startest den Thread
  • Direkt danach prüfst Du, ob dieser nicht mehr läuft?

Die zwei Ansätze, die Sinn machen könnten, hatte ich genannt:
a) ggf. modalen Dialog verwenden
b) Observer Patten (also das, was Du mit Events ja auch schon hast) um zwischen den Fenstern Daten auszutauschen.
 

Alex_99

Mitglied
Bin absoluter Anfänger und das ist mein erstes GUI Projekt :D Der Ansatz ist einen Thread zu erstellen und wenn auf load geklickt wird diesen zu schließen. Das Programm merkt das und führt den Code darunter aus :)
 

KonradN

Super-Moderator
Mitarbeiter
Diese GUIs sind in der Regel Event basiert und man sollte daher die eigene Applikation entsprechend aufbauen.

Also immer überlegen, was wann passieren soll. Der Benutzer macht etwas und darauf reagiert die Anwendung dann.

Und wenn man mehrere Fenster hat, dann sollte man diese entkoppeln. Aber das ist am Anfang evtl. schwer. Wenn das zweite Fenster etwas an das erste Fenster geben soll, dann kannst du da auch die Referenz übergeben. Also im Hauptfenster erstellst du das zweite Fenster und gibst dann eine Referenz vom Hauptfenster an das neue Fenster.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Aktion ausführen wenn Button geklickt wird Java Basics - Anfänger-Themen 7
I Aktion ausführen bei Enter Java Basics - Anfänger-Themen 6
B Bei Schließen von Fenster über x Aktion ausführen Java Basics - Anfänger-Themen 6
5 File->Open Dialog mit nachheriger Aktion ausführen. Java Basics - Anfänger-Themen 3
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
T Bei Buttonklick Aktion starten, nach erneutem Klick beenden Java Basics - Anfänger-Themen 4
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S Von Button und Radio Button Aktion bearbeiten Java Basics - Anfänger-Themen 10
H Problem: Button muss zwei Mal angeklickt werden, bis Aktion ausgeführt wird Java Basics - Anfänger-Themen 4
F Countdown und dann Aktion Java Basics - Anfänger-Themen 4
B eine Aktion Wiederholen Java Basics - Anfänger-Themen 6
L Aktion bei Abbruch des Programmes Java Basics - Anfänger-Themen 9
B wiederholte Button-Aktion Java Basics - Anfänger-Themen 3
S Aktion bei Tabwechsel Java Basics - Anfänger-Themen 3
G GUI mit Swing - Zahlen ausgeben und auf Aktion reagieren Java Basics - Anfänger-Themen 2
R Aktion bei Tastendruck Java Basics - Anfänger-Themen 5
J Threads: warten bis erste aktion ausgeführt wurde Java Basics - Anfänger-Themen 6
T aktion bei enter Java Basics - Anfänger-Themen 2
G Aktion bei Änderung in JTextArea starten Java Basics - Anfänger-Themen 2
V Buttons eine Aktion zuweisen Java Basics - Anfänger-Themen 4
S Zwei Tasten gleichzeitig für Aktion Java Basics - Anfänger-Themen 2
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C 2 SwingWorkers nacheinander ausführen Java Basics - Anfänger-Themen 1
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
hebein Mit Javaprogramm webseiten automatisiert befüllen und ausführen Java Basics - Anfänger-Themen 6
Jose05 ausführen im cmd schlägt fehl Java Basics - Anfänger-Themen 2
N Eclipse Programm normal ausführen Java Basics - Anfänger-Themen 1
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
C Programm ausführen ohne JRE? Java Basics - Anfänger-Themen 3
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
T src Ordner ausführen Java Basics - Anfänger-Themen 9
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
F cmd Befehl ausführen Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
M Rot Schwarz Bäume, ausführen? Java Basics - Anfänger-Themen 6
CptK Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
F Shell Script ausführen Java Basics - Anfänger-Themen 5
F Java auf Windows Konsole ausführen Java Basics - Anfänger-Themen 1
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
L Linux Befehle unter Windows in Eclipse ausführen Java Basics - Anfänger-Themen 3
L Shell Script ausführen in Java Java Basics - Anfänger-Themen 4
K Programm ausführen Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
alkaA Intellij Java Datei aus nicht Projekt ausführen? Java Basics - Anfänger-Themen 2
G sqlplus commands in java ausführen Java Basics - Anfänger-Themen 15
CptK Interface JTextField: Action mit Enter ausführen Java Basics - Anfänger-Themen 16
CptK Methoden Methode in MouseListner ausführen Java Basics - Anfänger-Themen 1
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
T Klassen 2 Klassen zeitgleich ausführen Java Basics - Anfänger-Themen 3
V Erste Schritte Anfänger: Ausführen eines Java-Programms Java Basics - Anfänger-Themen 5
B Java Eclipse Programm in einer Batch ausführen Java Basics - Anfänger-Themen 3
diqqerrr Java Datei als .exe ausführen Java Basics - Anfänger-Themen 8
I Erste Schritte Native code library failed to load beim Ausführen eines Beispiels Java Basics - Anfänger-Themen 5
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
H Script ausführen wenn Browser Notification eingetroffen ist? Java Basics - Anfänger-Themen 3
S Methoden Beim Start meines Projektes eine Methode ausführen Java Basics - Anfänger-Themen 14
V Methode eines Objekts einer ArrayList ausführen Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
RowdyN Methoden Befehle in zufälliger Reihenfolge ausführen lassen Java Basics - Anfänger-Themen 5
T Parallel ausführen Java Basics - Anfänger-Themen 1
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
S .java Datei in java Datei ausführen Java Basics - Anfänger-Themen 9
X Schleife bis "Bedingung" ausführen Java Basics - Anfänger-Themen 13
AssELAss Klassen Java Klasse in main-methode ausführen Java Basics - Anfänger-Themen 7
H Classpath VBScript in Jar-archiv ausführen Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
D Input/Output Mehrere Befehle nacheinander ausführen Java Basics - Anfänger-Themen 20
quecksilver if-Abfrage in main ausführen Java Basics - Anfänger-Themen 4
F Per Klick Klasse ausführen Java Basics - Anfänger-Themen 4
S Fehler beim Ausführen Java Basics - Anfänger-Themen 5
A Methode aus einer anderen Klasse ausführen Java Basics - Anfänger-Themen 7
F Methode alle 15min ausführen Java Basics - Anfänger-Themen 5
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
L Konsole öffnen und Java Programm darin ausführen Java Basics - Anfänger-Themen 4
J Ausführen geht nicht Java Basics - Anfänger-Themen 19
K Tastaturkombinationen ausführen Java Basics - Anfänger-Themen 5
S URL Ausführen Java Basics - Anfänger-Themen 2
D Fehlermeldung beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 4
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
J Eingabeaufforderung stürzt ab (beim Ausführen einer Java-Datei) Java Basics - Anfänger-Themen 3
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
M Komplexe Datenauswertungen in Java oder besser auf Datenbankseite ausführen? Java Basics - Anfänger-Themen 4
E Anderes Programm ausführen Java Basics - Anfänger-Themen 8
I .lnk ausführen oder das Ziel auslesen Java Basics - Anfänger-Themen 7
L0MiN Datei lässt sich nicht ausführen Java Basics - Anfänger-Themen 3
G Variabel: Nach String benannte Methode ausführen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben