Re: Self-configuring classes
On Aug 4, 1:47 am, nebulou...@gmail.com wrote:
On Aug 4, 4:29 am, Owen Jacobson <angrybald...@gmail.com> wrote:
Plenty of reasons. Someone keeping up on their skills in the face of
new java releases might be perusing java blogs and usenet posts.
Someone might have encountered one of the ways manipulating Swing
objects from outside the EDT can cause problems and be wondering why.
Someone might be having, well, this exact conversation and wondering
if more information was available somewhere.
In other words, you admit that the first warning anyone had of the
change might have been their being viciously attacked in the newsgroup
for not having apparently known about it.
In other words, you admit that the notification system is horribly
broken, and worse people are horribly rude and unforgiving of people
being out of date despite that.
All of these assertions hinge on there being a change. In fact, the
"old way" of creating and displaying some or all of the initial UI
from the main thread *never* worked reliably. I gather that Sun's
first goal was to ship a replacement for AWT as soon as possible and
second to fix any niggling "issues" like thread safety. Sun's
developers subsequently discovered, quite likely as the result of bug
reports from users in the field, that Swing's API was structured in a
way that made it impossible to make both thread-safe and performant.
The potential for application bugs was always there, but was not
always known. The only code change that introduced it was the one in
which Swing's event model came into being.
(I'll thank you to not put words in my mouth, if you please. I
believe the flaming and viciousness you're receiving at the hands of
others here has nothing whatsoever to do with Swing.)
The
"best" way to do something may or may not be the way you or I or
anyone else did it last year, and today's "best practice" may be
superceded by something better (simpler, faster, easier to debug, or
more flexible) in the future. A five- or ten-minute docs refresher on
the tool at hand often pays off in the long run.
No problem, except that there are two niggling issues.
1. If such a change occurs, some sort of alert has to occur. I'm not
going to check the docs every single day to see if something I use
routinely has changed! Nor the tutorials. If something like that
should be reread, then something should prompt everyone to whom it's
relevant to reread it. An announcement in this newsgroup could have
that effect, or a release note with a new version could prominently
mention the change in question.
2. If such a change occurs in a fairly quiet and poorly-documented
manner it is woefully inappropriate to respond to someone's not
knowing about it by blasting them with both barrels!
Sun is not and will never be the only source of information about bugs
and changes in Java. Indeed, very soon others will be able to compare
release tags of the JDK themselves for a blood-and-guts-level view of
the changes from release to release and publish their findings
anywhere they choose. Given that, and given that it's likely the
problems with initializing Swing components on the main thread were
discovered by users and not created or discovered by Sun, I hardly
expect them to generate an alert. They may as well generate an alert
every time a user discovers a flaw in the JVM, JRE, or JDK.
(Well, they do; you can watch the bug tracker yourself if you want
that much detail and want to be sure you miss nothing. Otherwise,
you'll have to content yourself with the level of detail provided by
whoever refines that raw bug and task information down to release
notes.)
Regardless of how well or poorly Sun propagated information about
Swing components being thread-unsafe, there are other sources of
information out there on the web. My own observation is that the
thread-safety issues with Swing because widely known sometime around
Java 5's release, if not slightly after; prior to that I'm sure a
handful of websites mentioned it and more than a few developers within
and without Sun had encountered it. At this point information about
Swing and threading is widely available on the internet at large.
Before you ask your usual next question, yes, I do expect you or any
other software developer to keep an eye on what "the internet at
large" is learning about the tools you or they use, since I do it
myself as a way of keeping my skills from rusting. Certainly not
everything, but if someone mentions a bit of information I wasn't
aware of it's up to me to search around and see what I can learn from
that.
It's the developer's responsibility to check which parts of the API
changed when a new version of Java is released -- Sun publishes that
information in the form of release notes and changelogs.
I don't recall deprecating showing frames from off the EDT being
mentioned in any of these for either Java 5 or Java 6. If it was it
was not prominently mentioned, despite the fact that nothing in the
API docs or tool behavior would call attention to the change.
This is important enough that I'll say it again: there was no change
to Swing. Manipulating Swing components from main has *never* been
safe. Sun believed it to be safe when they released Swing and the
original Swing tutorials; they were wrong. Are there other, similar
bugs in the JDK somewhere? Probably.
The problems in Swing's specific case are not the sort that leap out
at you; as you've already discovered, it's possible to do main-thread
component initialization and have it work. As with most threading
bugs, it's sensitive to load, the exact thread execution timing, and
many other factors, so number of states where Swing components do
something unexpected is fairly small compared to the number of states
where Swing components act as expected. This is why the bug initially
escaped detection.
Regardless, though, my main objection isn't to the change itself, or
even to Sun's relatively quiet non-announcement of it, but to the
manner in which it was brought to my attention: extremely rudely.
There was no cause for publicly belittling me and making it look as if
I were some kind of fool or know-nothing for not being aware of this
admittedly rather soft-pedaled and peculiar change.
Reading back over this thread, I don't find the way the bug in your
code was brought to your attention particularly vicious. It wasn't
particularly polite, but this is a technical newsgroup and extremely
blunt and direct phrases like "you shouldn't show a JDialog off the
EDT" are par for the course, not an act of hostility.
Clearly, you disagree, as is your prerogative. I wish you luck in
finding a forum where technical people of or above the calibre found
here are plentiful and as polite as geishas, as I doubt you'll ever
find that in the usenet comp.lang.* hierarchy.