Frage zu SwingUtilities.invokeLater

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ein wunderschönen guten Samstag, den 1.November 2008,

ok ich hör ja schon auf, ich hätte gerne eine Frage zu dem "invokeLater" Konstrukt: In unserem Programm benutze ich das, um einen längeren Task auszuführen und die Benutzereingaben während dieser Zeit zu blockieren (in dem Fall sei das mal ok)

Code:
SwingUtilities.invokeLater(new Runnable(){

  public void run(){
       setCursor(CURSOR_WAIT);
       //do something
  }
});

Das scheint auch soweit ok zu sein, nur, wenn die Anwendung während dieser Zeit in den Hintergrund bzw. minimiert und anschließend wieder geholt wird, bleibt die komplette Oberfläche während dieser Zeit grau. Ist das normal so, oder wie müsste man das ändern ?


Danke.
Robobot
 
G

Gast

Gast
Du verwechselst hier das "invokeLater" mit dem SwingWorker.
Der SwingWorker ist für länger laufende Tasks gedacht.
invokeLater dient nur dazu, etwas sicher im EDT (Event Dispatcher Tread) auszuführen
 

Robobot

Mitglied
Das Problem ist, dass ich diesen SwingWorker nicht verwenden kann, da wir Java5 verwenden müssen. Leider versteh ich für meinen Anwendungsfall immer noch nicht ganz, welches Konstrukt man verwenden sollte. Wer kann mir helfen, oder hat jemand einen anderen Vorschlag ?

Wenn der ActionListener ausgelöst wird, wird eine längere Rechenoperation durchgeführt. Während dieser Zeit soll die GUI blockiert werden.

Was ist nun das Richtige ? ???:L Danke auch.

Code:
public void actionPerformed(ActionEvent arg0) {

		//Variante 1
		SwingUtilities.invokeLater(new Runnable(){
			public void run() {
			   //führe eine längere Operation aus 
			  // und sperre während dieser Zeit die gui
			}
		});

		//Variante 2
		Thread thread = new Thread(){
			public void run() {
				   //führe eine längere Operation aus 
				  // und sperre während dieser Zeit die gui
			}
		};
		thread.start();
		
                //Variante 3
		Thread thread = new Thread(new Runnable(){
			public void run() {
				 //führe eine längere Operation aus 
				  // und sperre während dieser Zeit die gui
				
			}
		});
		thread.start();

               //Variante n ??
                
		
	}	
	button.addActionListener(this);
 
G

Gast

Gast
Zu deinen Varianten:
1: Ist Blödsinn, da das die Operation EXPLIZIT im EDT ausführt, also 100 % die GUI blockiert.

Die anderen beiden Varianten kannst du verwenden, aber eben genau für sowas gibt es den SwingWorker.

Du kannst den SwingWorker schon mit Java 5 verwenden.
Es gibt einen Backport:
https://swingworker.dev.java.net/

Einfach die 2-3 Klassen deinem Projekt hinzufügen und freuen =)
Mach ich auch immer, wenn Java5 Kompatibilität gefordert wird.


Hier ein einfaches, leicht verständliches SwingWorker Tutorial:
http://www.0x13.de/index.php/code-snippets/38-code-snippets/51-swingworker-tutorial.html
 
G

Gast

Gast
Wenn du die GUI während der Zeit unbedingt blockieren willst, dann mach, so lange der SwingWorker arbeitet, einen Dialog auf, in dem bsp. Bitte Warten steht.
 

Robobot

Mitglied
Hello again,
muss mich nochmal zurückmelden ;)

eine hätte ich noch: Eine Swing Klasse (extends JPanel) hat eine Instanz eines JDialogs (DetailDialog). Per Button wird dieser Dialog , falls noch nicht verhanden erzeugt, und das Objekt, von welchem man sich Details anzeigen lassen will, gesetzt. Wenn ich das nun richtig verstanden habe, wäre es der korrekte Weg dies so zu machen: (unter der Annahme dass hier keine zeitintensiven sondern lediglich GUI Operationen durchgeführt werden , z.B. setVisible(true) )

Code:
//Neu
detailsButton.addActionListener(new ActionListener(){
  
    public void actionPerformed(ActionEvent e) {
        SwingUtilities.invokeLater(new Runnable() {
           public void run() {
              if(detailDialog == null)
                  detailDialog = new DetailDialog();
              }
              detailDialog.setData(currentData); 
              detailDialog.setVisible(true); 
              
           }
        });
 
    }
});


//Bisher
detailsButton.addActionListener(new ActionListener(){
  
    public void actionPerformed(ActionEvent e) {
            if(detailDialog == null)
                detailDialog = new DetailDialog();
            }
            detailDialog.setData(currentData); 
            detailDialog.setVisible(true); 

 
    }
});

daher auch mal eine generelle Frage: Bisher sah ich die Verwendung von invokeLater immer nur am Beispiel in der main Methode, da diese im EDT ausgeführt wird. Wann sollte man dies typischerweise noch verwenden ?

Danke. - Robobot
 
G

Gast

Gast
Nein, in obiger Methode brauchst du kein invokeLater(), weil der Button und der ActionListener schon im EDT laufen, also auch dein new DetailDialog() im EDT aufgerufen wird. Das invokeLater() macht zwar nichts kaputt, wird aber im Allgemeinen nicht so gemacht.


Nein, die main Methode wird standardmäßig nicht im EDT ausgeführt. GUIs wie AWT oder Swing laufen im EDT. Ein Hello-World Programm auf der Konsole dagegen läuft zwar auch in einem Thread, der aber nicht EDT genannt wird.

Das invokeLater in der Main Methode hat bei GUI Anwendungen den zweck, dass 100% sichergestellt wird, dass die GUI auch im EDT gestartet wird.

das invokeLater verwendet man im allgemeinen, wenn man mehrere Threads hat und diese auf die GUI, bsp eine Tabelle oder Liste zugreifen wollen. Swing ist nicht theadsicher, daher wird durch invokelater erreicht, dass nur ein einziger thread, nämlich der EDT die GUI manipuliert.
 

Robobot

Mitglied
Besten Dank nochmal. Jetzt hab ichs.
edit: ich meine irgendwo mal gelesen zu haben, wie man den Haken setzt, ich finds leider nimmer.
 

André Uhres

Top Contributor
Robobot hat gesagt.:
ich meine irgendwo mal gelesen zu haben, wie man den Haken setzt, ich finds leider nimmer.
Wenn ein Gast den Thread startet, geht das wohl nicht :wink:
abhaken.jpg

Zum Thema siehe auch: Lesson: Concurrency in Swing
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
G Frage zu SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 16
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben