Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13022
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: JUnit Test von JButton: Action wird nicht erkannt |
| Date | 2016-07-19 18:59 +0200 |
| Organization | news.netcologne.de |
| Message-ID | <nmlm94$vfk$1@newsreader4.netcologne.de> (permalink) |
| References | <duo028Fb4qaU1@mid.individual.net> <nm8j8b$r9c$1@newsreader4.netcologne.de> <duqgrdFtso5U1@mid.individual.net> <nmbfkk$sk4$1@newsreader4.netcologne.de> <dv6mjhFqq9cU1@mid.individual.net> |
Responding to Christian H. Kuhn: >> Über SwingUtilities#invokeLater(). > > Mit den beiden invoke bin ich auch am Kämpfen. Beide sorgen auf dem EDT > für eine klare Abfolge von Events. Nur invokeAndWait() sorgt aber auch > für eine happens-before-Beziehung zwischen ausgeführten Befehlen auf dem > aufrufenden Thread und dem EDT. Nein! Der Unterschied ist, dass #invokeLater() asynchron ist, d.h. der Aufruf kehrt "sofort" zurück, und der übergebene Codeblock wird dann irgendwann später auf dem EDT ausgeführt. #invokeAndWait() ist synchron, d.h. der Aufruf kehrt erst zurück, wenn der Codeblock auf dem EDT tatsächlich ausgeführt wurde. Wenn kein besonderer Anlass für die Verwendung von #invokeAndWait() vorliegt, ist #invokeLater() zu bevorzugen. In beiden Fällen entsteht *keine* happens-before-Beziehung zwischen irgendwas. In dem Beispielschnipsel, den ich neulich hier hingeklebt habe, hat man eine happens-before-Beziehung zwischen dem Schreiben in die AtomicReference auf dem EDT und dem Lesen dieses Wertes auf dem main-Thread. Und die entsteht eben durch die Verwendung von AtomicReference, weil der Wert darin volatile gehalten wird. Im Prinzip könnte man #invokeAndWait() z.B. dadurch emulieren, dass man am Ende des #invokeLater() übergebenen Blocks ein CountdownLatch triggert und direkt nach dem Aufruf von #invokeLater() auf dieses Latch wartet. Dann hätte man tatsächlich eine happens-before-Beziehung zwischen diesen beiden Latch-Interaktionen. Wenn das noch fuzzy ist, war eine Stunde in der S-Bahn offenkundig nicht ausreichend. :) > Für manche Tests nicht unwichtig, die > darauf warten müssen, dass das EDT-Ereignis auch ausgeführt ist, bevor > der Test funktionieren kann. Dafür wirft invokeAndWait() eine Exception. > In normalem Code kann die problemlos abgefangen und verarbeitet werden; > in Runnables und actionPerformed muss man entweder eine try-catch mit > leerem Catch-Block machen, was alle statischen Codechecker anmeckern, > oder man macht im Catch-Block so Dinge wie > > final Thread thread = Thread.currentThread(); > thread.getUncaughtExceptionHandler().uncaughtException(thread, e); > > die auch keinen Schönheitspreis gewinnen. Das klingt auch noch etwas konfus. In beiden Fällen kann es passieren, dass der übergebene Block eine Exception wirft. Im Fall von #invokeAndWait() wird diese dann, in eine InvocationTargetException gewickelt, an den Aufrufer propagiert. Im Fall von #invokeLater() hat man diese Option nicht, denn der Block wird ja erst ausgeführt, nachdem der Aufruf zurückgekehrt ist. Also bleibt nichts, als diese Exception *im EDT* hochblubbern zu lassen, was wahrscheinlich auch eher unerwünscht ist. Um Exceptions im übergebenen Block muss sich also in jedem Fall Gedanken machen. Das Problem mit leeren catch-Blöcken ist sicher nicht rimäar, dass Codechecker das nicht mögen. Und was ein #invokeAndWait() in einem #actionPerformed() suchen könnte, will ich glaube ich gar nicht so genau wissen... ;) Viele Grüße, Patrick
Back to de.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 01:09 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 18:26 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-14 19:47 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 00:08 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:04 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 22:53 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:09 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 23:44 +0200
Countdown Timer Design (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:44 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 12:44 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 15:49 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 17:03 +0200
Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 15:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 14:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 16:06 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-19 18:59 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 22:35 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-20 13:00 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 20:36 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 23:15 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt Wanja Gayk <brixomatic@yahoo.com> - 2016-07-19 23:02 +0200
Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-20 12:33 +0200
GUI-Update über Swing-EDT (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 12:03 +0200
Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:43 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:18 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 15:24 +0200
Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-16 16:42 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:05 +0200
Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 16:02 +0200
csiph-web