I fear invokeLater is greatly misunderstood :)  It's meant to be called by code 
running off the EDT to make something GUI-esque happen on EDT.  As you're 
trapping an event, you're on EDT, of course, so you gotta tap into a thread 
pool 
or spawn your own thread.  Haven't looked at SwingWorker approaches -- could be 
the best way to go.  So it seems the OP's answer would be to invokeLater and 
pop 
up the progress message, then go off into another thread and so the actual work 
and upon completion call invokeLater once more to update the GUI.

 Alexey





________________________________
From: Ricky Clarkson <ricky.clark...@gmail.com>
To: javaposse@googlegroups.com
Sent: Wed, February 9, 2011 4:12:09 PM
Subject: Re: [The Java Posse] Re: Java Swing problem

That invokeLater is entirely pointless.  You may as well write:

private class ZoomListener implements ActionListener {
    public void actionPerformed(ActionEvent ev) {
        cardLayout.show(contentPane, "Progress Panel");
        repaint();
    }
}

Though I doubt you even need the repaint().

On Wed, Feb 9, 2011 at 9:09 PM, Eric <e.d.program...@gmail.com> wrote:
> My first attempt at threading is a failure.  The gui still appears to
> update only after my event method is complete.  I'll try to implement
> your worker code.  Thanks.
> Here's my apparently failed attempt.
>
> private class ZoomListener implements ActionListener {
>     public void actionPerformed(ActionEvent ev) {
>          loadProgress();
> ...
>     }
> }
> private void loadProgress() {
>     Runnable doShowProgressPanel = new Runnable() {
>          public void run() {
>               cardLayout.show(contentPane, "Progress Panel");
>               repaint();
>          }
>     };
>     SwingUtilities.invokeLater(doShowProgressPanel);
> }
>
> This code is all within my custom class which extends JFrame.
>
> On Feb 9, 3:44 pm, Ricky Clarkson <ricky.clark...@gmail.com> wrote:
>> Doing it later but on the EDT isn't a good move.
>>
>> SwingWorker is the answer, though it's imo not the best API, as it
>> swallows exceptions unless you override done() to call get().  Because
>> of that, I use my own subclass of SwingWorker<Void, Void>, as follows:
>>
>> import java.util.concurrent.ExecutionException;
>> import javax.swing.SwingWorker;
>>
>> public abstract class Worker extends SwingWorker<Void, Void> {
>>     protected void afterDone() {
>>     }
>>
>>     @Override
>>     public final void done() {
>>         try {
>>             get();
>>         } catch (InterruptedException e) {
>>             throw new RuntimeException(e);
>>         } catch (ExecutionException e) {
>>             throw new RuntimeException(e);
>>         }
>>         afterDone();
>>     }
>>
>> }
>>
>> If you have something else you want to do on the EDT after the
>> contents of doInBackground() you just override afterDone().  Probably
>> not the best naming, but it fills the hole.
>>
>>
>>
>> On Wed, Feb 9, 2011 at 8:32 PM, Alexey Zinger <inline_f...@yahoo.com> wrote:
>> > SwingUtilities.invokeLater FTW!
>>
>> > Alexey
>> > 2001 Honda CBR600F4i (CCS)
>> > 1998 Honda RS125 (CCS)
>> > 2002 Suzuki Bandit 1200S
>> >http://azinger.blogspot.com
>> >http://bsheet.sourceforge.net
>> >http://wcollage.sourceforge.net
>>
>> > ________________________________
>> > From: Eric <e.d.program...@gmail.com>
>> > To: The Java Posse <javaposse@googlegroups.com>
>> > Sent: Wed, February 9, 2011 3:15:15 PM
>> > Subject: [The Java Posse] Re: Java Swing problem
>>
>> > Odd that a request on Google Groups about which group to try for help
>> > with Java got several responses all pointing to other websites.
>> > In the lag time between making this post here and having it appear on
>> > this group thread list I did find a Java group called
>> > comp.lang.java.help.
>> > I didn't exactly find the solution but I did figure out the problem.
>> > I'm trying to execute some code in a Java event listener action method
>> > which takes some time.
>> > At the start of that method I want to show something on the screen to
>> > let the user know it's processing.
>> > At the end of the method I want it to show their new screen that
>> > processing just generated.
>> > The display from the start of the method never appears.  Apparently
>> > Java won't update gui while it's processing.
>> > It appears to be a threading issue.
>>
>> > On Feb 9, 10:40 am, Casper Bang <casper.b...@gmail.com> wrote:
>> >> > Is this a good group for a programming question, or can anyone point
>> >> > me to one?
>>
>> >> Nope this is more of a meta group, revolving around the JavaPosse GoF.
>> >> Oracle have stirred the pot of established forums, but I do believe
>> >> this is your best
>> >> bet:http://forums.oracle.com/forums/forum.jspa?forumID=950
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups
>> > "The Java Posse" group.
>> > To post to this group, send email to javaposse@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > javaposse+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> >http://groups.google.com/group/javaposse?hl=en.
>>
>> > --
>> > You received this message because you are subscribed to the Google Groups
>> > "The Java Posse" group.
>> > To post to this group, send email to javaposse@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > javaposse+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> >http://groups.google.com/group/javaposse?hl=en.- Hide quoted text -
>>
>> - Show quoted text -
>
> --
> You received this message because you are subscribed to the Google Groups 
> "The 
>Java Posse" group.
> To post to this group, send email to javaposse@googlegroups.com.
> To unsubscribe from this group, send email to 
>javaposse+unsubscr...@googlegroups.com.
> For more options, visit this group at 
>http://groups.google.com/group/javaposse?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.


 
____________________________________________________________________________________
TV dinner still cooling? 
Check out "Tonight's Picks" on Yahoo! TV.
http://tv.yahoo.com/

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to