On Tue, 05 Feb 2008 21:56:35 -0800, Lew <lew@lewscanon.com> wrote:
Running GUI events off the EDT is a known source of bugs.  That's why  
Sun now uses the word "must" with putting GUI events on the EDT.
You seem to be confusing the general issue of use of components with the  
specific scenario I'm talking about: creating the components off the EDT.
I am willing to take as granted that one must always use components after  
initialization in the EDT.  There are in fact statements to this effect in  
the actual Java API documentation, and that's good enough for me.
But as far as initialization goes, there's ample ambiguity here, in the  
documentation, in the tutorials, and in sample code I've seen all over the  
place.  I've been writing Java code for a month, and this is the first  
I've seen of any suggestion that _initialization_ is also required to be  
done on the EDT.  And it's not from lack of exposure to the documentation  
or to sample code.
How you interpret that is up to you.  But Sun has warned us that running  
GUI events *off* the EDT /might/ work.
I'm not talking about "running events".
It's not guaranteed not to work.  It's not guaranteed to work.  It is  
guaranteed to cause trouble under certain circumstances,
Such as?  I can reproduce synchronization problems at will in other  
contexts, through careful control of the threads involved (i.e. putting in  
different synchronization that ensures things happen in the wrong order).   
Under what circumstances is it _guaranteed_ that initializing my GUI  
components off the EDT will cause trouble?  Please provide sufficiently  
detailed information such that it would allow me to write sample code to  
reproduce the trouble.
circumstances that can occur when a program is ported from an  
environment where it appeared to work to a different platform.  It's a  
bad practice - that is certain.
No doubt.  But that's not the question here.
Whether you call it a "recommendation" or an "imperative" is entirely  
your choice.  But the facts have been laid out, and GIYF for finding  
more evidence in that area.
I'm quite familiar with Google.  I've been Googling Java issues for a  
month now.  But Google is not a great resource when one has already  
Googled and as a result of failing to find sought-after information has  
posted a question to a newsgroup.
If you have a point to make, surely you have some reference that supports  
the point.  Telling someone to Google for that reference when you already  
know what it is is just lame.  Asserting a point when you don't actually  
have a reference that supports the point is also lame.  Making a point and  
providing a reference, that's actually quite nice and helpful behavior.
Let's look at a different but related synchronization issue.  If two  
threads access a common object for both read and write, must you use  
synchronization to coordinate the two threads with respect to that  
object, or is that a recommendation?
You must use synchronization.  So?
After all, on some platforms if you're lucky the program might seem to  
work without synchronization.
I can easily write code that will consistently produce wrong results with  
incorrect synchronization.  It's true that one can get lucky and have it  
work without.  But it's also true that it's relatively simple to force a  
problem in order to demonstrate the risk of failing to synchronize.
Yes, but to do that you need to be in control of the competing threads. With the
You can't force it, you're not in control. The environment is not consistent, so
the results won't be. The problem with threads is that you are not in control
of when they execute, other than via synchronization techniques. Swing is not
synchronized and is therefore not thread safe. You don't control when the EDT
starts and you don't control what it does to the GUI components, or when. It's
not reliably reproducible because you can't control the execution of the EDT.
Happy searching.