Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: =?UTF-8?Q?Re:_GUI-Update_=c3=bcber_Swing-EDT?= Date: Sat, 16 Jul 2016 23:05:56 +0200 Lines: 42 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net 38zzCoZwtRVdIeOprUfCtAbEnHHU7md2MJl48UpZTUALrnSbQ= Cancel-Lock: sha1:7wSLEYfTa+jpqCBtmndnQVsJ6ss= 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:13002 Am 16.07.2016 um 16:42 schrieb Patrick Roemer: > Responding to Christian H. Kuhn: >> Ich hoffe, dass die >> VM sowas verhindert und ein Objekt erst da ist, wenn der Konstruktor >> fertig ausgeführt ist? > > Wenn es keine happens-before-Beziehung gibt: Nein. Google hat mir erzählt, dass ab (oder nach, egal, ich nutze 1.8) Java 1.5 volatile den von mir gewünschten Effekt ergibt, wenn der Konstruktor sich nicht vor fertigem Aufbau des Objekts in externe Listen o.ä. einträgt. > public static T fromEDT(Supplier block) > throws InterruptedException { > final AtomicReference ret = new AtomicReference<>(); > try { > SwingUtilities.invokeAndWait(() -> ret.set(block.get())); > } > catch (InvocationTargetException exc) { > Throwable cause = exc.getCause(); > if(cause instanceof Error) { > throw (Error)cause; > } > if(cause instanceof RuntimeException) { > throw (RuntimeException)cause; > } > // shouldn't happen - no checked exceptions from Supplier/Runnable > throw new RuntimeException(cause); > } > return ret.get(); > } > > String name = SwingHelper.fromEDT(() -> _parent.getName()); Zuerst nur übernommen, inzwischen auch verstanden. Lambda expressions sind schon c00l :-) v0.8.6 lg QNo