<div dir="ltr">I've created this ticket to track this issue:<div><br></div><div><a href="http://trac.imagej.net/ticket/2013">http://trac.imagej.net/ticket/2013</a><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, Oct 17, 2013 at 2:17 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">It does sound like the best thing to do would be for the QuitProgram plugin to post (= publishLater) a quit event that could be subscribed by something deeper inside scijava. Perhaps two events are needed - a QuitVeto event that is published and that can be vetoed by any subscribers (e.g - a script editor with an unsaved script) and, once everyone has committed to quitting, the actual Quit event which can be posted and handled in the event thread.</div>
<div class="HOEnZb"><div class="h5">
<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 17, 2013 at 3:03 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Still I guess that the thread running the QuitProgram plugin will always still be running while QuitProgram is disposing the context. So in addition maybe the context dispose code should be like a time bomb that is set, the QuitProgram plugin completes, and then the bomb goes off shutting all services down.</div>


<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 17, 2013 at 2:00 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I think that we should not need to make these changes. Curtis is right in that the services should shut down in an orderly fashion. I think the real problem is the services aren't shutting down in an expected order. One can print which services are getting disposed in what order and can see that they are nowhere near to the original initialization order. The ThreadService is terminating very early and then active threads associated with its executor become invalid. The ThreadService should be one of the last things to dispose but it is one of the first.</div>


<div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 3:53 PM, Curtis Rueden <span dir="ltr"><<a href="mailto:ctrueden@wisc.edu" target="_blank">ctrueden@wisc.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div dir="ltr"><div><div><div>> I could implement Curtis's suggestion and mark the status service as</div><div>> closed after dispatch</div></div><div><br></div></div>Well, intuitively, the EventService, StatusService, ThreadService, etc., once dispose() is called on them, shouldn't be hanging around anywhere else. That is, any services that use them should have already been disposed too, and no longer trying to publish anything. So something seems fishy to me here. But I admit I have spent zero time looking into it.<span><font color="#888888"><div>






<br></div><div>-Curtis</div></font></span><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 3:43 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>






<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Strange, I've cherrypicked the patch to my master branch of scijava-common and have successfully run it against the master branch of imagej and I don't see your error message when I close.<div>






<br></div>
<div>The patch is general and solves the case where you open a sample image and close - both cases catch the error. I could implement Curtis's suggestion and mark the status service as closed after dispatch - that's probably the correct way to do it, but this is pretty robust and does something useful with status messages sent during shutdown.</div>







</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 4:25 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>







<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Lee,<div><br></div><div>Using your patch I have an error. Open program and exit and I get this:</div><div>







<br></div><div>







<p><span>java.lang.IllegalStateException</span>: Context already injected: org.scijava.AbstractContextual#context</p>
<p><span>   </span>at org.scijava.Context.inject(<span>Context.java:281</span>)</p>
<p><span>   </span>at org.scijava.AbstractContextual.setContext(<span>AbstractContextual.java:66</span>)</p>
<p><span>   </span>at org.scijava.event.DefaultEventService.publishLater(<span>DefaultEventService.java:100</span>)</p>
<p><span>   </span>at org.scijava.app.DefaultStatusService.publish(<span>DefaultStatusService.java:123</span>)</p>
<p><span>   </span>at org.scijava.app.DefaultStatusService.showStatus(<span>DefaultStatusService.java:76</span>)</p>
<p><span>   </span>at imagej.module.ModuleRunner.run(<span>ModuleRunner.java:155</span>)</p>
<p><span>   </span>at imagej.module.ModuleRunner.call(<span>ModuleRunner.java:129</span>)</p>
<p><span>   </span>at imagej.module.ModuleRunner.call(<span>ModuleRunner.java:1</span>)</p>
<p><span>   </span>at java.util.concurrent.FutureTask$Sync.innerRun(<span>FutureTask.java:303</span>)</p>
<p><span>   </span>at java.util.concurrent.FutureTask.run(<span>FutureTask.java:138</span>)</p>
<p><span>   </span>at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(<span>ThreadPoolExecutor.java:895</span>)</p>
<p><span>   </span>at java.util.concurrent.ThreadPoolExecutor$Worker.run(<span>ThreadPoolExecutor.java:918</span>)</p>
<p><span>   </span>at java.lang.Thread.run(<span>Thread.java:680</span>)</p><p><br></p><p>Plus said patch will not affect the open sample image and then exit crashes. But that may need to be filed as a separate bug.</p>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 3:04 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>








<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Maybe I wasn't patient enough about refreshing everything.... will submit patch momentarily, but have only tested it on a modified version of the scijava-common-2.2.0 branch. I'd appreciate you merging and trying it.</div>








<div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 3:54 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>









<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">In imagej/pom.xml I added:<div><br></div><div>







<p><span><span>       </span><span>       </span></span><span><</span>scijava-common.version<span>></span><span>2.2.1-SNAPSHOT</span><span></</span>scijava-common.version<span>></span></p>
<p>in the <properties> section</p></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 2:46 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>










<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Are you editing one of the POMs to pick up the 2.2.1-SNAPSHOT version of scijava-common?</div><div>
<div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 3:45 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>











<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm not having any problems building scijava-common master against IJ2 master.</div><div class="gmail_extra">











<br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 2:25 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I have a very simple fix in scijava-common, but it seems that the head of the scijava-common master branch is not going to build with the head of the imagej master branch. How should I proceed? I could branch off off scijava-common-2.2.0 I suppose.</div>












<div><div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 2:44 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>













<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks. I also updated the ticket a bit a few minutes ago. In my second example problem (closing app with sample image open) it looks like the original open samples legacy command was not finishing its run. Not sure if this is related to your event processing changes.</div>














<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 1:19 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>














<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry, I missed it. I'll see if I can take a look at it,</div><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Oct 16, 2013 at 2:15 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Lee did you see I reopened ticket #1992 (<a href="http://trac.imagej.net/ticket/1992" target="_blank">http://trac.imagej.net/ticket/1992</a>) that was related to this code change?</div>















<div class="gmail_extra"><br><br><div class="gmail_quote">
On Mon, Oct 7, 2013 at 10:15 AM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
















<div dir="ltr">Merged</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 30, 2013 at 2:34 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br>

















<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I submitted a patch to scijava-common with the changes.<div><br></div><div><a href="https://github.com/scijava/scijava-common/pull/13" target="_blank">https://github.com/scijava/scijava-common/pull/13</a><br>

















</div><div><br>
</div><div><br></div></div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Sep 30, 2013 at 3:32 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br>


















<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">A proposed fix would be good Lee. I'd like to test the async status update code for responsiveness (i.e. when opening a large image let's say). Let me know when your fix is in place. Thanks.</div>


















<div class="gmail_extra">
<br><br><div class="gmail_quote">On Fri, Sep 27, 2013 at 6:54 AM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



















<div dir="ltr">Thanks Barry, the email was a little rushed - finished it while going out the door. What do you think about sending the status messages asynchronously? It looks to me like the AWT event processing will display them in the order received, so that makes sure that a "Finished" message will be seen after a "% complete" message. Status reporting is such a common thing - it'd be a shame for all the worker threads to stall because a user was using ImageJ to watch a movie of a cat falling off a TV while their batch job was running.<div>




















<br></div><div>I think I'll submit a patch to DefaultStatusService for asynch reporting and maybe Curtis or you could look it over and accept it. If you reject, NP.</div><span><font color="#888888"><div>
<br></div><div>--Lee</div></font></span></div><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Sep 26, 2013 at 7:53 PM, Barry DeZonia <span dir="ltr"><<a href="mailto:bdezonia@gmail.com" target="_blank">bdezonia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




















<div dir="ltr">Hi Lee,<div><br></div><div>I added the synchronized keyword yesterday to fix a bug. We can undo that change. I can work around the problem in another fashion if necessary.</div></div><div class="gmail_extra">





















<br><br><div class="gmail_quote">On Thu, Sep 26, 2013 at 3:57 PM, Lee Kamentsky <span dir="ltr"><<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





















<div dir="ltr">Hi all, I'm getting a deadly embrace that happens when the AWT event queue thread tries to get a lock within DefaultDatasetView.getColor and when DefaultStatusService.showStatus on a worker thread tries to publish a synchronous request for status display after taking the DefaultDatasetView's lock in DefaultDatasetView.rebuild. It happens periodically, but it's timing-dependent, so not so reproducible.<div>






















<br></div><div>The bug is somewhat debatable. Possible candidates: It's a little drastic for DefaultDatasetView.getColor to synchronize on the view itself. Maybe some proxy for the color system could have a synchronizing object. The other candidate is DefaultEventService.showStatus which could use EventService.publishLater - I don't think there's much need for status publishers to wait around for the status to show on the screen.</div>






















<div><div><br></div><div>The two stack traces:</div><div><div>Thread [AWT-EventQueue-0] (Suspended)<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>DefaultDatasetView.getColor(ChannelCollection) line: 261<span style="white-space:pre-wrap">        <font color="#0000ff">Synchronized method on DefaultDatasetView</font></span></div>






















<div><span style="white-space:pre-wrap">  </span>FgColorTool(AbstractColorTool).drawIcon() line: 175<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>FgColorTool(AbstractColorTool).onEvent(DisplayActivatedEvent) line: 184<span style="white-space:pre-wrap"> </span></div>






















<div><span style="white-space:pre-wrap">  </span>NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>Method.invoke(Object, Object...) line: 597<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventService$ProxySubscriber<E>.onEvent(E) line: 282<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventService$ProxySubscriber<E>.onEvent(Object) line: 1<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventBus(ThreadSafeEventService).publish(Object, String, Object, List, List, StackTraceElement[]) line: 971<span style="white-space:pre-wrap">      </span></div><div>
<span style="white-space:pre-wrap">     </span>DefaultEventBus.access$1(DefaultEventBus, Object, String, Object, List, List, StackTraceElement[]) line: 1<span style="white-space:pre-wrap">      </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventBus$1.run() line: 201<span style="white-space:pre-wrap">       </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultThreadService.invoke(Runnable) line: 91<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventBus.publishNow(Object, String, Object, List, List, StackTraceElement[]) line: 195<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventBus.publishNow(Object) line: 86<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventService.publish(E) line: 95<span style="white-space:pre-wrap"> </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultDisplayService.setActiveDisplay(Display<?>) line: 129<span style="white-space:pre-wrap">      </span></div><div><span style="white-space:pre-wrap"> </span>DefaultDisplayService.onEvent(WinActivatedEvent) line: 247<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>Method.invoke(Object, Object...) line: 597<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventService$ProxySubscriber<E>.onEvent(E) line: 282<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventService$ProxySubscriber<E>.onEvent(Object) line: 1<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventBus(ThreadSafeEventService).publish(Object, String, Object, List, List, StackTraceElement[]) line: 971<span style="white-space:pre-wrap">      </span></div><div>
<span style="white-space:pre-wrap">     </span>DefaultEventBus.access$1(DefaultEventBus, Object, String, Object, List, List, StackTraceElement[]) line: 1<span style="white-space:pre-wrap">      </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventBus$1.run() line: 201<span style="white-space:pre-wrap">       </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultThreadService.invoke(Runnable) line: 91<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventBus.publishNow(Object, String, Object, List, List, StackTraceElement[]) line: 195<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventBus.publishNow(Object) line: 86<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventService.publish(E) line: 95<span style="white-space:pre-wrap"> </span></div>






















<div><span style="white-space:pre-wrap">  </span>AWTWindowEventDispatcher.windowActivated(WindowEvent) line: 94<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Window).processWindowEvent(WindowEvent) line: 1877<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(JFrame).processWindowEvent(WindowEvent) line: 274<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Window).processEvent(AWTEvent) line: 1823<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) line: 4630<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) line: 2099<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: 2478<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: 4460<span style="white-space:pre-wrap">        </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultKeyboardFocusManager(KeyboardFocusManager).redispatchEvent(Component, AWTEvent) line: 1850<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>DefaultKeyboardFocusManager.typeAheadAssertions(Component, AWTEvent) line: 910<span style="white-space:pre-wrap">  </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: 409<span style="white-space:pre-wrap">   </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) line: 4502<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) line: 2099<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: 2478<span style="white-space:pre-wrap">       </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: 4460<span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap"> </span>EventQueue.dispatchEvent(AWTEvent) line: 599<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent(SentEvent).dispatch() line: 55<span style="white-space:pre-wrap"> </span></div><div><span style="white-space:pre-wrap"> </span>DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch() line: 183<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultKeyboardFocusManager.sendMessage(Component, AWTEvent) line: 210<span style="white-space:pre-wrap">  </span></div><div><span style="white-space:pre-wrap"> </span>DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: 286<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) line: 4502<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) line: 2099<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: 2478<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: 4460<span style="white-space:pre-wrap">        </span></div>






















<div><span style="white-space:pre-wrap">  </span>EventQueue.dispatchEvent(AWTEvent) line: 599<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>SequencedEvent.dispatch() line: 101<span style="white-space:pre-wrap">     </span></div>






















<div><span style="white-space:pre-wrap">  </span>EventQueue.dispatchEvent(AWTEvent) line: 597<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>EventDispatchThread.pumpOneEventForFilters(int) line: 269<span style="white-space:pre-wrap">       </span></div>






















<div><span style="white-space:pre-wrap">  </span>EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184<span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap"> </span>EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174<span style="white-space:pre-wrap">       </span></div>






















<div><span style="white-space:pre-wrap">  </span>EventDispatchThread.pumpEvents(int, Conditional) line: 169<span style="white-space:pre-wrap">      </span></div><div><span style="white-space:pre-wrap"> </span>EventDispatchThread.pumpEvents(Conditional) line: 161<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>EventDispatchThread.run() line: 122<span style="white-space:pre-wrap">     </span></div></div><div><br></div><div><div>Thread [SciJava-4b2922f6-Thread-27] (Suspended)<span style="white-space:pre-wrap">  </span></div>






















<div><span style="white-space:pre-wrap">  </span>Object.wait(long) line: not available [native method]<span style="white-space:pre-wrap">   </span></div><div><span style="white-space:pre-wrap"> </span>EventQueue$1AWTInvocationLock(Object).wait() line: 485<span style="white-space:pre-wrap">  <font color="#0000ff">Waiting for AWT event thread to read invocation request.</font></span></div>






















<div><span style="white-space:pre-wrap">  </span>EventQueue.invokeAndWait(Runnable) line: 993<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>DefaultThreadService.invoke(Runnable) line: 95<span style="white-space:pre-wrap">  </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventBus.publishNow(Object, String, Object, List, List, StackTraceElement[]) line: 195<span style="white-space:pre-wrap">   </span></div><div><span style="white-space:pre-wrap"> </span>DefaultEventBus.publishNow(Object) line: 86<span style="white-space:pre-wrap">     </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultEventService.publish(E) line: 95<span style="white-space:pre-wrap"> </span></div><div><span style="white-space:pre-wrap"> </span>DefaultStatusService.showStatus(int, int, String) line: 77<span style="white-space:pre-wrap">      </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultMinMaxMethod<T>.report() line: 296<span style="white-space:pre-wrap"> </span></div><div><span style="white-space:pre-wrap"> </span>DefaultMinMaxMethod<T>.process() line: 155<span style="white-space:pre-wrap">        </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultAutoscaleMethod<T>.getRange(IterableInterval<T>) line: 70<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>DefaultAutoscaleService.getDefaultIntervalRange(IterableInterval<RealType<?>>) line: 97<span style="white-space:pre-wrap">     </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultAutoscaleService.getDefaultRandomAccessRange(RandomAccessibleInterval<RealType<?>>) line: 105<span style="white-space:pre-wrap">        </span></div><div>
<span style="white-space:pre-wrap">     </span>DefaultDatasetView.autoscale(int) line: 176<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>DefaultDatasetView.initializeView(boolean) line: 499<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultDatasetView.rebuild() line: 383<span style="white-space:pre-wrap">  <font color="#0000ff">Takes the DefaultDatasetView lock.</font></span></div><div><span style="white-space:pre-wrap">    </span>DefaultImageDisplay.rebuild() line: 140<span style="white-space:pre-wrap"> </span></div>






















<div><span style="white-space:pre-wrap">  </span>DefaultImageDisplay.display(Object) line: 273<span style="white-space:pre-wrap">   </span></div><div><span style="white-space:pre-wrap"> </span>DefaultOverlayService.addOverlays(ImageDisplay, List<Overlay>) line: 148<span style="white-space:pre-wrap">  </span></div>






















<div><span style="white-space:pre-wrap">  </span>TurboRegRegister.run() line: 144<span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap"> </span>CommandModule.run() line: 196<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>ModuleRunner.run() line: 168<span style="white-space:pre-wrap">    </span></div><div><span style="white-space:pre-wrap"> </span>ModuleRunner.call() line: 129<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>ModuleRunner.call() line: 1<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>FutureTask$Sync.innerRun() line: 303<span style="white-space:pre-wrap">    </span></div>






















<div><span style="white-space:pre-wrap">  </span>FutureTask<V>.run() line: 138<span style="white-space:pre-wrap">     </span></div><div><span style="white-space:pre-wrap"> </span>ThreadPoolExecutor$Worker.runTask(Runnable) line: 886<span style="white-space:pre-wrap">   </span></div>






















<div><span style="white-space:pre-wrap">  </span>ThreadPoolExecutor$Worker.run() line: 908<span style="white-space:pre-wrap">       </span></div><div><span style="white-space:pre-wrap"> </span>Thread.run() line: 662<span style="white-space:pre-wrap">  </span></div>






















</div><div><br></div></div></div>
<br>_______________________________________________<br>
ImageJ-devel mailing list<br>
<a href="mailto:ImageJ-devel@imagej.net" target="_blank">ImageJ-devel@imagej.net</a><br>
<a href="http://imagej.net/mailman/listinfo/imagej-devel" target="_blank">http://imagej.net/mailman/listinfo/imagej-devel</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
ImageJ-devel mailing list<br>
<a href="mailto:ImageJ-devel@imagej.net" target="_blank">ImageJ-devel@imagej.net</a><br>
<a href="http://imagej.net/mailman/listinfo/imagej-devel" target="_blank">http://imagej.net/mailman/listinfo/imagej-devel</a><br>
<br></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>