Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #17462
| Path | csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Eric Sosman <esosman@ieee-dot-org.invalid> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Can you get this SwingWorker code to work more than once |
| Date | Thu, 09 Aug 2012 14:29:34 -0400 |
| Organization | A noiseless patient Spider |
| Lines | 53 |
| Message-ID | <k00vii$voo$1@dont-email.me> (permalink) |
| References | <d88d5a10-6b44-4917-9bc3-dee0b5d745f1@googlegroups.com> <k00m3o$uos$1@dont-email.me> <4cc76fc2-fffc-470d-b4c6-0be778070523@googlegroups.com> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=ISO-8859-1; format=flowed |
| Content-Transfer-Encoding | 7bit |
| Injection-Date | Thu, 9 Aug 2012 18:29:38 +0000 (UTC) |
| Injection-Info | mx04.eternal-september.org; posting-host="ffb8f7085759b339c1002252b48331a4"; logging-data="32536"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18HZVHaPvRzOi8eMOc0Ncch" |
| User-Agent | Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120713 Thunderbird/14.0 |
| In-Reply-To | <4cc76fc2-fffc-470d-b4c6-0be778070523@googlegroups.com> |
| Cancel-Lock | sha1:Pd2LK7GoR7BseN1uwo/fIS7+LcA= |
| Xref | csiph.com comp.lang.java.programmer:17462 |
Show key headers only | View raw
On 8/9/2012 11:55 AM, clusardi2k@aol.com wrote:
> On Thursday, August 9, 2012 11:48:04 AM UTC-4, Eric Sosman wrote:
>> On 8/9/2012 11:24 AM, ... wrote: > Here is a project that works
>> perfectly only the first time. [...] Quoth the JavaDoc: "SwingWorker is only
>> designed to be executed once. Executing a SwingWorker more than once will not
>> result in invoking the doInBackground method twice." If you want to do a
>> background task N times, you'll need N instances of SwingWorker, one per task
>> execution. -- Eric Sosman esosman@ieee-dot-org.invalid
>
> So, I want a project to do the following:
>
> (1) Display a button when the project is run,
> (2) When the user presses the button, a label is displayed.
> (3) The project next executes three long "for" loops such as in a previous post of this thread.
> (4) When the three "for" loops are finished, the label disappears.
>
> Question: How can I repeatedly do steps (2) through (4) above when a project is started?
"When a project is started?" Or "Each time the user presses
the button?" I'll assume the latter.
When you set up the button, create an ActionListener to be
notified of button presses. The listener's actionPerformed()
method will display the label (that's #2 above), create a SwingWorker,
call the worker's execute() method, and return.
Because execute() was called, Java will ("eventually," but in
practice "fairly soon") start the SwingWorker on a background
thread and call its doInBackground() method. This method runs the
long loops (#3) and then returns. Note that since it's executing
on a background thread and not on the event dispatch thread (EDT),
doInBackground() should do almost nothing to or with the GUI: Only
a very few bits of Swing are thread-safe.
After doInBackground() returns, Java will ("eventually/soon")
call the SwingWorker's done() method. This call runs on the EDT,
so the done() method can manipulate the GUI: It can make the label
invisible or even remove it from its container (#4).
Next time the user presses the button, the actionPerformed()
method creates a brand-new SwingWorker and the same sequence of
actions repeats. You can't re-use the old SwingWorker instance,
but you can create a new instance of the same class, running the
same code.
All this and more is covered in the Java Tutorial's chapter
on Swing concurrency,
<http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html>
--
Eric Sosman
esosman@ieee-dot-org.invalid
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Can you get this SwingWorker code to work more than once clusardi2k@aol.com - 2012-08-09 08:24 -0700
Re: Can you get this SwingWorker code to work more than once Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-08-09 11:48 -0400
Re: Can you get this SwingWorker code to work more than once clusardi2k@aol.com - 2012-08-09 08:55 -0700
Re: Can you get this SwingWorker code to work more than once markspace <-@.> - 2012-08-09 09:11 -0700
Re: Can you get this SwingWorker code to work more than once Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-08-09 14:29 -0400
Re: Can you get this SwingWorker code to work more than once clusardi2k@aol.com - 2012-08-09 09:11 -0700
Re: Can you get this SwingWorker code to work more than once Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-08-09 14:31 -0400
Re: Can you get this SwingWorker code to work more than once Knute Johnson <nospam@knutejohnson.com> - 2012-08-09 09:18 -0700
csiph-web