Roger: yes, total agreement here :-)
the way I override is not to silence the problem, but to permit few more legitimate threads along with those already used by pivot; Andrei -------- Original Message -------- Subject: Re: 2.0.1 release and threads From: Roger L. Whitcomb <[email protected]> To: Andrei Pozolotin <[email protected]> Cc: [email protected] Date: Mon 16 Jan 2012 02:46:13 PM CST > > Hi Andrei, > > Yes, I remember the discussion about this earlier. > There was a good reason for being able to override the default > checker, as in your case running inside another container. It’s just > that overriding the checker, for instance, to just silence the > assertion, is not a particularly good idea, except, perhaps, for the > very narrow case where you have to get something working ASAP, and are > now alerted to the fact that you will soon have to fix the background > thread code, AND put back the assert once you’re done. > > > > *From:*Andrei Pozolotin [mailto:[email protected]] > *Sent:* Monday, January 16, 2012 12:41 PM > *To:* Roger L. Whitcomb > *Cc:* [email protected]; [email protected] > *Subject:* Re: 2.0.1 release and threads > > > > Roger: > > yes, good point; > > and in my case I have legitimate scenario > when I have to provide alternative checker, since I am running inside > osgi launcher, > which is not covered by the default pivot checker implementation; > > Andrei. > > -------- Original Message -------- > Subject: Re: 2.0.1 release and threads > From: Roger L. Whitcomb <[email protected]> > <mailto:[email protected]> > To: Andrei Pozolotin <[email protected]> > <mailto:[email protected]>, [email protected] > <mailto:[email protected]> > Cc: [email protected] <mailto:[email protected]> > Date: Mon 16 Jan 2012 02:34:03 PM CST > > But note that while this would eliminate the exception thrown by this > “assert” it will not eliminate the subtle bugs that are really there > because your UI updates are not being done in the event thread. So, > even though things appear to work, there really are problems that will > end up biting you at some point. That was the reason for putting in > this assert, to alert you to the fact that there are really problems > that you are not aware of. > > > > ~Roger > > > > *From:*Andrei Pozolotin [mailto:[email protected]] > *Sent:* Monday, January 16, 2012 12:31 PM > *To:* [email protected] <mailto:[email protected]> > *Cc:* Roger L. Whitcomb; [email protected] > <mailto:[email protected]> > *Subject:* Re: 2.0.1 release and threads > > > > Lukas: > > you can provide a temporary work around > by providing an alternative implementation to thread checker used by > assert > > org.apache.pivot.wtk.Container.assertEventDispatchThread > > Andrei > > -------- Original Message -------- > Subject: Re: 2.0.1 release and threads > From: Roger L. Whitcomb <[email protected]> > <mailto:[email protected]> > To: [email protected] <mailto:[email protected]>, > [email protected] <mailto:[email protected]> > Date: Mon 16 Jan 2012 12:39:29 PM CST > > > Hi Lukas, > That approach is still valid (and encouraged) EXCEPT that all updates > to the UI MUST happen in the Event Dispatch Thread (or 'EDT'). This is now > enforced in 2.0.1 (as you can see). This is inherent, not only in Pivot, but > all other GUI frameworks (that I know of). So, even though it "appeared" to > work fine with 2.0, there are/were subtle problems that you just didn't see > yet. > What you need to do is use either a TaskAdapter class or call the > ApplicationContext.queueCallback() method to schedule your UI updates in the > EDT, rather than doing them directly in the background thread. For an > example you can look at the Tutorial here: > http://pivot.apache.org/tutorials/background-tasks.html. I can step you > through your code in more detail if you need more help. Our application also > has a number of places where we have needed to do this. > I'm going to transfer this to the User list since this is not a > developer issue, per se, since it is not a bug. It is, however, something > that has definitely changed (for the better) in 2.0.1. > Thank you for using Pivot, though!! > > ~Roger > > -----Original Message----- > From: Lukáš Macháček [mailto:[email protected]] > Sent: Monday, January 16, 2012 8:17 AM > To: [email protected] <mailto:[email protected]> > Subject: 2.0.1 release and threads > > Hi all, > > I am now testing coming 2.0.1 release of Pivot libraries with my desktop > application developed during previous year on Pivot 2.0 and am facing > one great problem with threads :-( > > Every task which loads data at background and worked in 2.0 well now > throws exception like this: > > java.lang.IllegalStateException: this method can only be called from the > AWT event dispatch thread, and not from "Thread-26" > at org.apache.pivot.wtk.Container$1.check(Container.java:872) > at > org.apache.pivot.wtk.Container.assertEventDispatchThread(Container.java:880) > at org.apache.pivot.wtk.Component.repaint(Component.java:2047) > at org.apache.pivot.wtk.Component.repaint(Component.java:1998) > at > org.apache.pivot.wtk.skin.ComponentSkin.repaintComponent(ComponentSkin.java:351) > at > org.apache.pivot.wtk.skin.ComponentSkin.repaintComponent(ComponentSkin.java:346) > at > org.apache.pivot.wtk.skin.terra.TerraTableViewSkin.enabledChanged(TerraTableViewSkin.java:1394) > at > org.apache.pivot.wtk.Component$ComponentStateListenerList.enabledChanged(Component.java:399) > at org.apache.pivot.wtk.Component.setEnabled(Component.java:2173) > at cz.cgrim.alchemist.dql.RunQueryTask.execute(RunQueryTask.java:58) > at cz.cgrim.alchemist.dql.RunQueryTask.execute(RunQueryTask.java:23) > at > org.apache.pivot.util.concurrent.Task$ExecuteCallback.run(Task.java:42) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) > at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) > at java.util.concurrent.FutureTask.run(FutureTask.java:166) > at java.lang.Thread.run(Thread.java:722) > > In this example at first it disables TableView (to disable user > interaction during background load of data), than it loaded results from > DQL query into that TableView and at the end it enabled that TableView. > > I have tens of use cases with similar approach in my application used to > load data at background because it can take long time to finish while > user can work on another tasks. > > Another equal problem with thread has occurred for example in my custom > Log4J Appender: > > Exception in thread "Timer-2" java.lang.IllegalStateException: this > method can only be called from the AWT event dispatch thread, and not > from "Timer-2" > at org.apache.pivot.wtk.Container$1.check(Container.java:872) > at > org.apache.pivot.wtk.Container.assertEventDispatchThread(Container.java:880) > at org.apache.pivot.wtk.Component.invalidate(Component.java:1955) > at > org.apache.pivot.wtk.skin.ComponentSkin.invalidateComponent(ComponentSkin.java:340) > at > org.apache.pivot.wtk.skin.TextAreaSkinParagraphView.textRemoved(TextAreaSkinParagraphView.java:419) > at > org.apache.pivot.wtk.TextArea$Paragraph$ParagraphListenerList.textRemoved(TextArea.java:55) > at > org.apache.pivot.wtk.TextArea$Paragraph.removeText(TextArea.java:153) > at org.apache.pivot.wtk.TextArea.insertText(TextArea.java:757) > at org.apache.pivot.wtk.TextArea.insertText(TextArea.java:730) > at > cz.cgrim.alchemist.logger.TextAreaAppender.append(TextAreaAppender.java:41) > at > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) > at > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) > at org.apache.log4j.Category.callAppenders(Category.java:206) > at org.apache.log4j.Category.forcedLog(Category.java:391) > at org.apache.log4j.Category.log(Category.java:856) > at com.documentum.fc.common.DfLogger.warn(DfLogger.java:151) > at > com.documentum.fc.client.impl.bof.cache.ClassCacheManager$CacheCleanupTask.run(ClassCacheManager.java:602) > at java.util.TimerThread.mainLoop(Timer.java:555) > at java.util.TimerThread.run(Timer.java:505) > > Here I simply implement AppenderSkeleton and append every line from > LoggingEvent into Pivot's TextPane. Log4J runs it in separate thread. > > Please, is now there another approach how to use threads and Pivot's > Task to do changes in GUI or is it a bug? In 2.0 release everything > spoken here worked like a charm. > > Thanks for an advance. > Lukas Machacek > > > > >
