Wieder einmal Event-Dispatch-Thread

Status
Nicht offen für weitere Antworten.

AMiGA

Bekanntes Mitglied
Hallo,

ich habe leider immer noch ein Verständnisproblem bzgl. des Event-Dispatch-Threads. Angenommen, ich möchte bei einem Knopfdruck Daten aus einer Datenbank lesen und dem Benutzer dies vorher mitteilen, dann würde der Code folgendermaßen aussehen:

Code:
public void actionPerformed(ActionEvent evt) {
    textField.setText("Es werden nun Daten aus der DB gelesen");
    Database.execQuery("...");
    textField.setText("Anfrage erfolgreich");
}

Nun würde die Ausgabe "Es werden Daten gelesen" aber erst *nach* Beendigung der DB-Anfrage erscheinen. Daher müsste man wohl mit Hilfe eines zusätzlichen Threads die DB-Anfrage entkoppeln:

Code:
public void actionPerformed(ActionEvent evt) {
    textField.setText("Es werden nun Daten aus der DB gelesen");
    new Thread() {
        public void run() {
            Database.execQuery("...");

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    textField.setText("Anfrage erfolgreich");
                }
            }
    }.start();
}

Dies ist für meine Begriffe aber äußerst unschön. Gibt es keine andere (="sauberere") Möglichkeit, das GUI aus dem Event-Dispatch-Thread zu aktualisieren?

Gruß,
AMiGA
 

Mag1c

Top Contributor
Hi,

müsste auch so gehen:

Code:
public void actionPerformed(ActionEvent evt) {
    new Thread() {
        public void run() {
            textField.setText("Es werden nun Daten aus der DB gelesen");
            Database.execQuery("...");
            textField.setText("Anfrage erfolgreich");
            }
    }.start();
}

was ist daran unschön ?

Gruß
Mag1c
 

AMiGA

Bekanntes Mitglied
was ist daran unschön

Mir gefällt das Multithreading und das Asynchrone dabei nicht wirklich. Nun muss ich mich darum kümmern, dass sämtliche Komponenten gesperrt werden, damit der Benutzer so lange nichts anstellt, bis die DB-Anfrage beendet ist. Bislang versuche ich eigentlich, Threads wenn irgendwie möglich zu vermeiden, um die Fehlerträchtigkeit gering zu halten.

Gruß,
AMiGA
 

Mag1c

Top Contributor
Hi,

damit geht es:

Code:
textField.paintImmediately(textField.getBounds());

Gruß
Mag1c
 
B

Beni

Gast
Um Multithreading, wie du es am Anfang gepostet hast, wirst du nicht herumkommen (es sei denn, du baust gerne potentielle Fehlerquellen ein ... wie Magic1 krampfhaft versucht vorzuführen :bae:).

Du musst das ganze ja nicht so offensichtlich machen (und in jeder Methode extra einen Thread starten...), schau dir mal das Command-Pattern an. Da machst du ein Interface "Command" mit einem Methode "work", und gibst diese Commands in irgendeine Liste (die von einem anderen Thread abgearbeitet wird). Die Commands können natürlich auch direkt vom EventDispatcher aufgerufen werden, mit dem invokeAndWait...

Code:
actionPerformed( ... ){
  commandListe.execute( new Command(){
     public void work(){
        textField.setText( "Warten" );
     }, true // true: im EventDispatcher
  }

  commandListe.execute( new Command(){
     public void work(){
        ladeDBZeugsUndSpeichereEs();
     }, false // false: in eigenem Thread
  }

  commandListe.execute( new Command(){
     public void work(){
        textField.setText( "Fertig" );
     }, true
  }
}
 

Mag1c

Top Contributor
Hi,

kann mich Beni nur anschließen. Wenn nämlich jemand während der DB-Abfrage schnell mal ein Spielchen macht und anschließend zu der Anwendung zurückgeht, dann sieht er dort (falls die DB-Abfrage noch läuft) nur ein leeres Fenster ... sehr unschön !

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E wieder einmal JTable AWT, Swing, JavaFX & SWT 5
M wieder einmal JScrollPane und JList AWT, Swing, JavaFX & SWT 4
W JTabele Aktualisieren - Wieder einmal AWT, Swing, JavaFX & SWT 4
richis-fragen Wie kann man den RowSorter dazu bringen die ursprünglich liste wieder anzuzeigen. AWT, Swing, JavaFX & SWT 28
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
J Swing Fenster lässt sich nach Schließung nicht wieder öffnen AWT, Swing, JavaFX & SWT 4
O JTable zeigt die alte Daten wieder AWT, Swing, JavaFX & SWT 23
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
C SWT CTabItem wieder sichtbar machen AWT, Swing, JavaFX & SWT 3
C Schon wieder JTable AWT, Swing, JavaFX & SWT 7
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
R Komponente wieder entfernen AWT, Swing, JavaFX & SWT 13
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
L Buttons aus Arrayliste erstellt wie komm ich nun wieder an das Oobjekt aus der arrayliste ran AWT, Swing, JavaFX & SWT 3
Z Swing Buttons wieder entfernen vom Bildschirm AWT, Swing, JavaFX & SWT 5
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
N gezeichnete Graphiken speichern und wieder anzeigen AWT, Swing, JavaFX & SWT 8
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
Ollek Swing JPnales nach bestimmtenVorgang wieder anzeigen AWT, Swing, JavaFX & SWT 4
P Swing Hintergrundfarbe auslesen und wieder setzen AWT, Swing, JavaFX & SWT 4
M AWT Zurücksetzbutton, wieder auf das original Bild AWT, Swing, JavaFX & SWT 3
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
M Fenster nach minimierung zum tray wieder öffnen AWT, Swing, JavaFX & SWT 3
E Swing Wieder ein Bild einfügen AWT, Swing, JavaFX & SWT 2
P schon wieder schlange AWT, Swing, JavaFX & SWT 8
Luy Per TAB-Taste aus TextArea wieder raus? AWT, Swing, JavaFX & SWT 5
D Swing JMenu wieder schließen lassen AWT, Swing, JavaFX & SWT 7
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
B Wie kann ich ein event wieder beseitigen AWT, Swing, JavaFX & SWT 2
hdi Swing mal wieder EDT -> nichts passiert AWT, Swing, JavaFX & SWT 20
S Feintuning, mal wieder Threading + swing ... AWT, Swing, JavaFX & SWT 8
P JTable...mal wieder AWT, Swing, JavaFX & SWT 7
S JDialog startet immer wieder neu AWT, Swing, JavaFX & SWT 2
A Wie werde ich beim JTable die Selection wieder los? AWT, Swing, JavaFX & SWT 6
PAX Iconified JFrame per Code wieder anzeigen lassen (deiconify) AWT, Swing, JavaFX & SWT 2
T Mal wieder Swing GUI AWT, Swing, JavaFX & SWT 7
hdi repaint() mag mal wieder nicht. AWT, Swing, JavaFX & SWT 9
T JCheckBox deselektieren (Haken wieder entfernen) - wie? AWT, Swing, JavaFX & SWT 5
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
G Ein jTextField im laufe das Programmes immer wieder updaten AWT, Swing, JavaFX & SWT 2
G wieder mal das leidige thema listener AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
C JTable. Mal wieder AWT, Swing, JavaFX & SWT 10
T Ich komme mal wieder nicht mit Swing und Image klar. AWT, Swing, JavaFX & SWT 5
G SWT Toolbar: Toolitem entfernen und wieder hinzufügen AWT, Swing, JavaFX & SWT 16
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
T Linien zeichnen und wieder löschen AWT, Swing, JavaFX & SWT 9
Z Und schon wieder die Linien (Problem beim überzeichnen) AWT, Swing, JavaFX & SWT 4
V mal wieder das gute alte gridbaglayout AWT, Swing, JavaFX & SWT 4
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
S JScrollPane mal wieder AWT, Swing, JavaFX & SWT 2
R JLabel Icon wieder entfernen AWT, Swing, JavaFX & SWT 4
R Mal wieder JTable AWT, Swing, JavaFX & SWT 11
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G mal wieder table. AWT, Swing, JavaFX & SWT 3
X wieder mal ein prob mit dnd AWT, Swing, JavaFX & SWT 14
Luma Alle Fenster verstecken und wieder sichtbar machen? AWT, Swing, JavaFX & SWT 6
S JFrame minimieren und wieder herstellen AWT, Swing, JavaFX & SWT 2
J Spalte in JTable aus- und wieder einblenden AWT, Swing, JavaFX & SWT 10
R Anonymen CaretListener wieder entfernen AWT, Swing, JavaFX & SWT 4
G JTabbedPane: Tabs verschwinden lassen und wieder anzeigen AWT, Swing, JavaFX & SWT 3
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
juppi JFrame will nicht wieder verschwinden AWT, Swing, JavaFX & SWT 2
K Und schon wieder JInternalFrame AWT, Swing, JavaFX & SWT 2
S Wieder eine Frage zu javax.swing.text AWT, Swing, JavaFX & SWT 2
G Eintrag soll nur einmal in Listview zu sehen sein AWT, Swing, JavaFX & SWT 3
J Nur einmal?? AWT, Swing, JavaFX & SWT 2
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
Paul15 Button funktioniert nur einmal AWT, Swing, JavaFX & SWT 9
M JavaFX WebView lässt sich nur einmal öffnen AWT, Swing, JavaFX & SWT 2
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
H messageDialog nur einmal anzeigen lassen? AWT, Swing, JavaFX & SWT 2
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
J AWT Einmal FileDialog-Beispiel für Dumme bitte AWT, Swing, JavaFX & SWT 6
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
R Noch einmal x^2 bzw. parabel AWT, Swing, JavaFX & SWT 2
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
O Swing Button löst zweimal aus, obwohl nur einmal geklickt AWT, Swing, JavaFX & SWT 3
M AWT Mehrere JToolBars auf einmal? AWT, Swing, JavaFX & SWT 5
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
A Card Panel wird nur einmal eingeblendet AWT, Swing, JavaFX & SWT 3
I TrayIcon aber bitte nur einmal AWT, Swing, JavaFX & SWT 2
G KeyListener funktioniert nur einmal AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben