Re: How to change JPanels?
On 2/16/2011 5:37 AM, Eric wrote:
On Feb 15, 6:21 pm, Lew<no...@lewscanon.com> wrote:
Tell us what part ofhttp://download.oracle.com/javase/tutorial/uiswing/concurrency/dispat...
is not clear and we'll help.
What's not clear is how there can be only one EDT. EDT means event
dispatching thread. If there's only one thread, how can it be 2
threads?
There is only one EDT. The worker thread(s) that run the do the
doInBackground work are not the EDT, and therefore cannot safely do any
GUI actions directly. They can, of course, use the SwingUtilities
invokeLater to cause things to happen in the EDT, just like any other
thread. They can also do things in the EDT in their process and done
methods.
There are two types of work that run in the EDT:
1. Event handling, such as running GUI listeners.
2. Other things that API documentation says run in the EDT, such as the
process and done methods of a SwingWorker, and the run method of an
SwingUtilities invokeLater argument.
I did read the docs. Maybe it's just me but they're not entirely
clear. Is doInBackground not able to execute any gui commands, or is
it just not supposed to (bad form)? ...
In general, executing GUI work in a thread other than the one and only
EDT is neither guaranteed to work nor guaranteed to not work. It's a
matter of luck. If you want to write a program that always works, do all
your GUI work in the EDT. If you want a responsive GUI, do long running
work in threads other than the EDT, e.g. using a SwingWorker.
Patricia