[kepler-dev] Wrong thread?

Christopher Brooks cxh at eecs.berkeley.edu
Thu Mar 30 00:17:09 PST 2006


In http://bugzilla.ecoinformatics.org/show_bug.cgi?id=2343

Nandita wrote:
> Christopher wrote:
> > > Laura wrote:
> > > -remove the ptolemy icon in the title bar
> > The icon is set in
> > ptolemy.actor.gui.TableauFrame._getDefaultIconImage() and defaults to
> > "/ptolemy/actor/gui/PtolemyIISmallIcon.gif" Since there is already a
> > Kepler specific copy of this class, I created be able to either create
> > kepler/src/exp/ptolemy/actor/gui/PtolemyIISmallIcon.gif or else edit
> > the Kepler copy of TableauFrame and change the name of the gif.  I
> > tried some things, but the icon was not displayed properly.  It looks
> > like a threading issue?  I'm not sure what's up.
>
> When WelcomeWindow was in Kepler tree, the following seemed to remove
> the icon image../hide it..
> setIconImage(new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB));

I'm not sure, but I think the problem here is that the code is being
run in the wrong thread.

I modified my local copy of
kepler/src/exp/ptolemy/actor/gui/TableauFrame.java
so that _getDefaultIconImage prints the name of the current thread
and whether that thread is the Swing event dispatch thread:

    protected Image _getDefaultIconImage() {
        new Exception("\n\nKepler TableauFrame._getDefaultIconImage(): currentThread: " + Thread.currentThread() + " isEventDispatchThread: " + javax.swing.SwingUtilities.isEventDispatchThread() ).printStackTrace();

        if (_defaultIconImage == null) {

When I run Kepler, _getDefaultIconImage is called three times,
and once it is in the event dispatch thread, twice it is not.

The stack traces below show where the method is called in Kepler.
Search for "isEventDispatchThread" to see the calls.

When I run similar code in Ptolemy, I'm always in the event dispatch thread.

I'm not much of a GUI programmer, but when I've seen these sorts of
issues with image loading, it has been because something was running
in the wrong thread.


     [java] Kepler TableauFrame._getDefaultIconImage(): currentThread: Thread[AW
T-EventQueue-0,6,main] isEventDispatchThread: true
     [java]     at ptolemy.actor.gui.TableauFrame._getDefaultIconImage(TableauFr
ame.java:716)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:122)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:109)
     [java]     at ptolemy.actor.gui.PtolemyFrame.<init>(PtolemyFrame.java:97)
     [java]     at ptolemy.vergil.basic.BasicGraphFrame.<init>(BasicGraphFrame.j
ava:207)
     [java]     at ptolemy.vergil.basic.ExtendedGraphFrame.<init>(ExtendedGraphF
rame.java:95)
     [java]     at ptolemy.vergil.actor.ActorGraphFrame.<init>(ActorGraphFrame.j
ava:121)
     [java]     at ptolemy.vergil.actor.ActorGraphTableau.<init>(ActorGraphTable
au.java:108)
     [java]     at ptolemy.vergil.actor.ActorGraphTableau$Factory.createTableau(
ActorGraphTableau.java:163)
     [java]     at ptolemy.actor.gui.PtolemyTableauFactory.createTableau(Ptolemy
TableauFactory.java:100)
     [java]     at ptolemy.actor.gui.TableauFactory.createTableau(TableauFactory
.java:122)
     [java]     at ptolemy.actor.gui.Configuration.createPrimaryTableau(Configur
ation.java:214)
     [java]     at ptolemy.vergil.VergilApplication$1.run(VergilApplication.java
:440)
     [java]     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:
178)
     [java]     at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
     [java]     at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDi
spatchThread.java:201)
     [java]     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDisp
atchThread.java:151)
     [java]     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.j
ava:145)
     [java]     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.j
ava:137)
     [java]     at java.awt.EventDispatchThread.run(EventDispatchThread.java:100
)
     [java] java.lang.Exception:

     [java] Kepler TableauFrame._getDefaultIconImage(): currentThread: Thread[ma
in,5,main] isEventDispatchThread: false
     [java]     at ptolemy.actor.gui.TableauFrame._getDefaultIconImage(TableauFr
ame.java:716)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:122)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:109)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:99)
     [java]     at ptolemy.actor.gui.HTMLViewer.<init>(HTMLViewer.java:87)
     [java]     at ptolemy.actor.gui.HTMLViewerTableau.<init>(HTMLViewerTableau.
java:87)
     [java]     at ptolemy.actor.gui.WelcomeWindowTableau.<init>(WelcomeWindowTa
bleau.java:60)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
     [java]     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
     [java]     at java.lang.reflect.Constructor.newInstance(Constructor.java:27
4)
     [java]     at ptolemy.moml.MoMLParser._createInstance(MoMLParser.java:3691)

     [java]     at ptolemy.moml.MoMLParser._createEntity(MoMLParser.java:3535)
     [java]     at ptolemy.moml.MoMLParser.startElement(MoMLParser.java:2183)
     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:918)
     [java]     at com.microstar.xml.XmlParser.parseContent(XmlParser.java:1101)

     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:921)
     [java]     at com.microstar.xml.XmlParser.parseContent(XmlParser.java:1101)

     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:921)
     [java]     at com.microstar.xml.XmlParser.parseDocument(XmlParser.java:479)

     [java]     at com.microstar.xml.XmlParser.doParse(XmlParser.java:157)
     [java]     at com.microstar.xml.XmlParser.parse(XmlParser.java:130)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1298)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1255)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1228)
     [java]     at ptolemy.vergil.VergilApplication._createEmptyConfiguration(Ve
rgilApplication.java:458)
     [java]     at ptolemy.actor.gui.MoMLApplication._parseArgs(MoMLApplication.
java:904)
     [java]     at ptolemy.vergil.VergilApplication._parseArgs(VergilApplication
.java:527)
     [java]     at ptolemy.actor.gui.MoMLApplication.<init>(MoMLApplication.java
:210)
     [java]     at ptolemy.vergil.VergilApplication.<init>(VergilApplication.jav
a:107)
     [java]     at org.kepler.gui.KeplerApplication.main(KeplerApplication.java:
34)
     [java] java.lang.Exception:

     [java] Kepler TableauFrame._getDefaultIconImage(): currentThread: Thread[ma
in,5,main] isEventDispatchThread: false
     [java]     at ptolemy.actor.gui.TableauFrame._getDefaultIconImage(TableauFr
ame.java:716)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:122)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:109)
     [java]     at ptolemy.actor.gui.TableauFrame.<init>(TableauFrame.java:99)
     [java]     at ptolemy.actor.gui.HTMLViewer.<init>(HTMLViewer.java:87)
     [java]     at ptolemy.actor.gui.WelcomeWindow.<init>(WelcomeWindow.java:105
)
     [java]     at ptolemy.actor.gui.WelcomeWindowTableau.<init>(WelcomeWindowTa
bleau.java:61)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeC
onstructorAccessorImpl.java:39)
     [java]     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Del
egatingConstructorAccessorImpl.java:27)
     [java]     at java.lang.reflect.Constructor.newInstance(Constructor.java:27
4)
     [java]     at ptolemy.moml.MoMLParser._createInstance(MoMLParser.java:3691)

     [java]     at ptolemy.moml.MoMLParser._createEntity(MoMLParser.java:3535)
     [java]     at ptolemy.moml.MoMLParser.startElement(MoMLParser.java:2183)
     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:918)
     [java]     at com.microstar.xml.XmlParser.parseContent(XmlParser.java:1101)

     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:921)
     [java]     at com.microstar.xml.XmlParser.parseContent(XmlParser.java:1101)

     [java]     at com.microstar.xml.XmlParser.parseElement(XmlParser.java:921)
     [java]     at com.microstar.xml.XmlParser.parseDocument(XmlParser.java:479)

     [java]     at com.microstar.xml.XmlParser.doParse(XmlParser.java:157)
     [java]     at com.microstar.xml.XmlParser.parse(XmlParser.java:130)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1298)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1255)
     [java]     at ptolemy.moml.MoMLParser.parse(MoMLParser.java:1228)
     [java]     at ptolemy.vergil.VergilApplication._createEmptyConfiguration(Ve
rgilApplication.java:458)
     [java]     at ptolemy.actor.gui.MoMLApplication._parseArgs(MoMLApplication.
java:904)
     [java]     at ptolemy.vergil.VergilApplication._parseArgs(VergilApplication
.java:527)
     [java]     at ptolemy.actor.gui.MoMLApplication.<init>(MoMLApplication.java
:210)
     [java] WelcomeWindow()
     [java]     at ptolemy.vergil.VergilApplication.<init>(VergilApplication.jav
a:107)
     [java]     at org.kepler.gui.KeplerApplication.main(KeplerApplication.java:
34)
     [java] WelcomeWindow: setTitle: Unnamed
     [java] WelcomeWindow: setTitle: file:/C:/cxh/src/kepler/configs/ptolemy/con
figs/kepler/intro.htm

_Christopher


More information about the Kepler-dev mailing list