Hello again Bill,
> I don't think an extension of JPanel that implements Runnable
> violates any Threading rules as long as it doesn't invoke the
> JPanel methods that must be invoked from the UI Thread.
I'd agree that you can do this and not break threading rules, but it seems
like a misplacement of responsibility. Ask an experienced Swing developer
and they'll open their eyes wide with suspicion at the idea of a Swing
component that implements Runnable.
My gut feeling is that you don't need this separate thread at all, as
external objects who want to ask the canvas to repaint can do so by just
invoking canvas.repaint() directly rather than using renderTrigger(). I
tried this quickly by changing renderTrigger() to simply invoke repaint()
rather than doing the notification, and things still seemed to work.
But playing around further now, I'm finding that problems still occasionally
occur(no matter which versions of run/renderTrigger I use, although the
problem frequency seems to vary), specifically with the projection. If I
run Test73 often enough, or even Test40, either one or the other of the two
displays eventually comes up with the wrong projection. Are there other
potentially guilty threads around?