Re: File browser
Daniele Futtorovic wrote:
On 2008-02-06 03:15 +0100, Peter Duniho allegedly wrote:
On Tue, 05 Feb 2008 18:01:29 -0800, Daniele Futtorovic
And that's not even a "MUST" rule, but rather a strong
recommendation and its scope solely synchronisation/concurrency
Well, I guess I'm not clear on the replies here then. Lew says that
I have no choice and must invoke the initialization on the EDT. Your
reply seems to say that as long as I know that I won't run into any
synchronization issues (and given that none of my UI is visible
while I'm doing the initialization, why would I?), that
initialization is fine on the initial thread
Well, you tried doing the initial GUI setup in the main thread and
showing it there, didn't you? It works. Consequently it's not a MUST
rule as the examples of the Win and Mac API you spoke of.
As a matter of fact, you probably would get an application to run
properly even if you ignored that rule -- provided you didn't went
overboard with threads, mayhap issued a supplementary repaint() or two
here and there and, most importantly, ran on a single core CPU.
Actually, when you use Swing, you are using more than one thread
automatically. The main thread and the EDT. When ever more than one
thread is involved, you *must* use proper synchronization to be safe.
This must is the same as you must wear a safety belt in a car. You
might get away without it most of the time, but the one time you don't
could be fatal.
Case and point, there was once an automated medical scanning device that
worked 99.9% of the time, but there were a few accidents that no one
could figure out what happened. A few patients died from over-exposure
to radiation. This product of course had been extensively tested and
retested, and worked for so much of the time, but due to a race
condition it could fail (catastrophically) in an unexpected way.
Now, I assume that failure in this case isn't as dangerous, but when
you've been told to wear your safety belt, why shrug it off because
you've survived so far.
(and in fact, I infer that if you can ensure synchronization then
interacting with the components is fine any time).
Not quite. You should know how slippery beasts synchronisation issues (I
do not primarily mean dead-locks or race-conditions, but memory
visibility issues) can be. I don't think it is possible to tell with
sufficient certainty that you won't have synchronisation problems in
your GUI -- given its sheer complexity. I'd venture even someone who'd
have written Swing (presuming it had been written by one single person)
wouldn't be able to tell. Also, keep in mind that Swing components are
unsynchronised by design.
So you MIGHT run into problems, or rather: there most probably WILL be
problems, whether you notice them or not -- the more complex your GUI,
the more you use different threads, the more cores: the more likely --
and such problems as would be *very* difficult to track down.
Therefore: strong recommendation.
Very Very strong.
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>