Returning values from Swing using invokeAndWait

Posted by Joonas Pulakka on Stack Overflow See other posts from Stack Overflow or by Joonas Pulakka
Published on 2010-03-08T13:34:57Z Indexed on 2010/03/08 13:36 UTC
Read the original article Hit count: 264

Filed under:
|
|

I've been using the following approach to create components and return values from Swing to/from outside the EDT. For instance, the following method could be an extension to JFrame, to create a JPanel and add it to the parent JFrame:

public JPanel threadSafeAddPanel() {

    final JPanel[] jPanel = new JPanel[1];

    try {
        EventQueue.invokeAndWait(new Runnable() {
            public void run() {
                jPanel[0] = new JPanel();
                add(jPanel[0]);
            }
        });
    } catch (InterruptedException ex) {
    } catch (InvocationTargetException ex) {
    }

    return jPanel[0];
}

The local 1-length array is used to transfer the "result" from inside the Runnable, which is invoked in the EDT. Well, it looks "a bit" hacky, and so my questions:

  1. Does this make sense? Is anybody else doing something like this?
  2. Is the 1-length array a good way of transferring the result?
  3. Is there an easier way to do this?

© Stack Overflow or respective owner

Related posts about java

Related posts about swing