But the dialog is opened on the EDT, meaning that you'll lock up the UI thread, and the UI will appear to hang.
-T On Tue, Jan 26, 2010 at 12:43 PM, Andreas Siegrist <[email protected]>wrote: > I'm sorry I think I've misunderstood your questions. > So if you want to do that: > new Dialog("ajsdfoj"); > System.out.println("I'm 100% sure that the Dialog is closed now!"); > > try it with this class: > > import java.util.concurrent.Semaphore; > > import org.apache.pivot.wtk.Dialog; > import org.apache.pivot.wtk.DialogCloseListener; > import org.apache.pivot.wtk.Display; > import org.apache.pivot.wtk.Window; > > public class BlockingDialog extends Dialog { > static Semaphore lock = new Semaphore(0); > > public void open(Display display, Window owner, boolean modal) { > DialogCloseListener closeListener = new > DialogCloseListener() { > @Override > public void dialogClosed(Dialog arg0, > boolean arg1) { > lock.release(); > } > }; > open(display, owner, modal, closeListener); > > try { > lock.acquire(); > } catch (InterruptedException e) { > e.printStackTrace(); > } > } > } > > > On Jan 26, 2010, at 6:13 PM, Clint Gilbert wrote: > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Thanks very much, I'll try this out later. I tried similar strategies > > with different util.concurrent primitives, but never with a Semaphore in > > this way. > > > > Andreas Siegrist wrote: > >> like that: > >> > >> import java.util.concurrent.Semaphore; > >> > >> import org.apache.pivot.wtk.Dialog; > >> import org.apache.pivot.wtk.DialogCloseListener; > >> import org.apache.pivot.wtk.Display; > >> import org.apache.pivot.wtk.Window; > >> > >> public class DialogProxy extends Dialog { > >> static Semaphore lock = new Semaphore(1); > >> > >> public void open(Display display, Window owner, boolean modal) { > >> try { > >> lock.acquire(); > >> DialogCloseListener closeListener = new > DialogCloseListener() { > >> @Override > >> public void dialogClosed(Dialog arg0, > boolean arg1) { > >> lock.release(); > >> } > >> }; > >> open(display, owner, modal, closeListener); > >> > >> } catch (InterruptedException e) { > >> e.printStackTrace(); > >> } > >> } > >> } > >> > >> > >> On Jan 26, 2010, at 5:51 PM, Clint Gilbert wrote: > >> > >> Could you elaborate on this please? > >> > >> Andreas Siegrist wrote: > >>>>> Hi there > >>>>> > >>>>> I also did something like that > >>>>> All I needed to do is making a Proxy class with a synchronized > method. > >>>>> > >>>>> Andreas > >>>>> > >>>>> On Jan 26, 2010, at 3:06 PM, Christopher Brind wrote: > >>>>> > >>>>>> Hi Bob, > >>>>>> > >>>>>> This isn't really about being modal, but about stopping the flow of > execution. For example, in Javascript: > >>>>>> > >>>>>> Alert.show("hello"); > >>>>>> Alert.show("world"); > >>>>>> > >>>>>> The second alert doesn't appear until you press OK on the first. > >>>>>> > >>>>>> In Pivot or Swing (and every other UI framework?) if you popup an > Alert processing continues, for instance in Flex: > >>>>>> > >>>>>> Alert.show("hello"); > >>>>>> Alert.show("world"); > >>>>>> > >>>>>> The second alert appears immediately and on top of the previous one. > >>>>>> > >>>>>> Clint wants to achieve the first scenario, but this is not possible > with Pivot. > >>>>>> > >>>>>> Cheers, > >>>>>> Chris > >>>>>> > >>>>>> > >>>>>> > >>>>>> 2010/1/26 Bob Santos <[email protected]> > >>>>>> If I'm not mistaken, in Swing, you can create confirm > dialogs(Yes/No), message dialogs or option dialogs by using JOptionPane and > also I think they are by default modal(?), which means access to other part > of the application is not allowed until interaction with the active dialog > is done. > >>>>>> > >>>>>> You can also create your custom dialog by extending Dialog and > specifying the modality. > >>>>>> > >>>>>> And yes it helps to know that everything you want to do with the UI > should be done within the EDT as Greg stated. > >>>>>> > >>>>>> > >>>>>> > >>>>>> On Tue, Jan 26, 2010 at 9:40 PM, Greg Brown <[email protected]> > wrote: > >>>>>> Hi Clint, > >>>>>> > >>>>>>> Now, my question: Is it possible to achieve behavior like the > >>>>>>> Javascript's alert() function with Pivot? That is, I'd like to put > up a > >>>>>>> simple yes/no "do something"/"please don't" popup on the screen, > and > >>>>>>> have the app block - the alert doesn't just block input to other > >>>>>>> elements - until the user chooses an option, or closes the popup. > This > >>>>>>> is possible in SWT, I don't know about Swing. > >>>>>> Sorry, it is not possible - as you noted, Window#open() is not a > blocking call in WTK. Pivot is ultimately based on AWT, which uses a push > model for event notifications (vs. pull). If you were to call a blocking > method from a user input event such as a button press, no further event > processing could occur until that method had returned, and the entire UI > would appear to freeze. > >>>>>> > >>>>>> I personally don't mind the anonymous inner class syntax: > >>>>>> > >>>>>> dialog.open(owner, new DialogCloseListener() { > >>>>>> @Override > >>>>>> public void dialogClosed(Dialog dialog, boolean modal) { > >>>>>> // Get selected option and act on it > >>>>>> } > >>>>>> }); > >>>>>> > >>>>>> I actually think this reflects a pretty consistent design - you open > the dialog in response to one event (e.g. "button pressed"), and you handle > the dialog's result in response to another event (e.g. "dialog closed"). > >>>>>> > >>>>>>> Making the call to Dialog.open() from another thread doesn't have > any effect. > >>>>>> Note that, as in Swing, multi-threaded access to UI elements is not > supported. All UI operations must be performed on the EDT. > >>>>>> > >>>>>> Hope this helps, > >>>>>> Greg > >>>>>> > >>>>>> > >>>>>> > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v1.4.9 (GNU/Linux) > > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > > > iEUEARECAAYFAktfIrgACgkQ5IyIbnMUeTs68wCfRN4pFmE9I/ndC0/rwve+pqmF > > qoMAl21cXxJaX/T7LLlyA9V9CsoDYNc= > > =XWBq > > -----END PGP SIGNATURE----- > >
