Path: csiph.com!weretis.net!feeder4.news.weretis.net!storethat.news.telefonica.de!feedme.news.telefonica.de!telefonica.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Re: JUnit Test von JButton: Action wird nicht erkannt Date: Tue, 19 Jul 2016 22:35:59 +0200 Lines: 37 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net D3ARSoPHUabJXVHGJ50OLAUQyA6eTADaAudN9b/W3HlS5GE10= Cancel-Lock: sha1:ptNlAlGZGOJi+nqDYIupCPQkS14= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 In-Reply-To: Xref: csiph.com de.comp.lang.java:13023 Am 19.07.2016 um 18:59 schrieb Patrick Roemer: > Responding to Christian H. Kuhn: > In beiden Fällen entsteht *keine* happens-before-Beziehung zwischen > irgendwas. JETZT bin ich verwirrt. Ich war der Ansicht, bei commandA(); SwingUtilities.invokeAndWait(() -> {commandB}); commandC(); SwingUtilities.invokeAndWait(() -> {commandD}); könnte ich mich darauf verlassen, dass die Reihenfolge A-B-C-D eingehalten wird, sofern A und C nur auf dem gerade laufenden aufrufenden Thread arbeiten, während bei dem entsprechenden Aufruf mit invokeLater() lediglich sicher ist, dass A vor C (auf dem Hauptthread) und B vor D (auf dem Swing-EDT) ausgeführt wird? > Und was ein #invokeAndWait() in einem > #actionPerformed() suchen könnte, will ich glaube ich gar nicht so genau > wissen... ;) Nix direktes. Warum das eher dämlich wäre, habe ich schon begriffen :-) Es gibt aber Methoden, die könnten theoretisch vom EDT aus aufgerufen werden, dann bräuchten sie kein invoke...(). Oder von irgendeinem anderen Thread. Dann brauchen sie invoke. Den Swing-EDT kann man feststellen. Die throw-Klausel hat man aber trotzdem, wenn man die Exception des invoke nicht fangen mag. Das kann auch eine beliebig lange Kette von Methodenaufrufen sein. Und wenn keine dieser Methoden etwas Sinnvolles mit der Exception aus invokeAndWait() anfangen kann, landet die irgendwan in actionPerformed(). lg QNo