In article <eJOqc.4845372$>,
electric sheep <> wrote:
>
.k.
>:
>
n the sun website they have these cryptic words:
>:To avoid the possibility of deadlock, you must take extreme care that
>:Swing components and models are created, modified, and queried only from
>:the event-dispatching thread.
>:
>:and they give this sample code:
>: javax.swing.SwingUtilities.invokeLater(new Runnable() {
>: public void run() {
>: createAndShowGUI();
>: }
>: });
>:
>:my question is this.
>:"create and modify" means just that ... even creating.
>:
>:i had thought of making a class, having it extend JFrame and implement
>:Runnable, like so:
>:
>:class MyGUI extends JFrame implements Runnable {
>: MyGUI()
>: ...
>:
>: public void run()
>: ...
>:}
>:
>:then do:
>:javax.swing.SwingUtilities.invokeLater(new MyGUI());
>:
>:but in fact, that wouldn't be following Sun's advice to the letter i
>:guess, would it ?
>:
>:Because the JFrame object (MyGUI) would be created, and then the handle
>:to this object would be passed to invokeLater().
>:So in fact, part of the GUI would have already been created in the
>:"main" thread.
>:
>:So I guess I need to create my MyGUI object from within a method, say
>:createGUI(), as opposed to "on-the-fly" like this ?
If Sun's really saying "create and modify" then they're confusing the
issue more than is needed. It's perfectly OK to create GUI components
outside the EDT (as in JPanel panel = new JPanel(), for instance). What
you must not do is cause them to be shown, hidden, added to visible
components, or otherwise have their state changed in a way that would
result in painting and some other actions. So it's just fine to
instantiate your GUI class, but do NOT call pack, or setVisible(true),
or a variety of other things which cause the component hierarchy to be
"realized".
= Steve =
--
Steve W. Jackson
Montgomery, Alabama