Martin Grigorov-4 wrote
> 
> On Wed, Jan 18, 2012 at 12:39 PM, humcasma <humcasma@> wrote:
>>
>> Martin Grigorov-4 wrote
>>>
>>> Pastebin you code.
>>>
>>
>> While cleaning up the code to post it here I found a timer.stop() where
>> it
>> should not be. After removing it, everything works as it should do. That
>> is,
>> I create a new timer whenever the form is submitted, and add it to my
>> textarea component. The timer starts working, as well as the background
>> thread. When the latter is finished, I stop the timer and remove it from
>> the
>> textarea from within the timer's onTimer() method.
>> I have noted that I need to stop the timer before I remove it. Otherwise
>> I
>> get the exception below. It is really not a problem to stop the timer,
>> but
>> since I am removing it anyway, I wonder if it should strictly be
>> necessary
>> to do it.
>>
>> Cheers,
>> Humberto
>>
>>
>> ERROR - DefaultExceptionMapper     - Unexpected error occurred
>> org.apache.wicket.WicketRuntimeException: Method onRequest of interface
>> org.apache.wicket.behavior.IBehaviorListener targeted at
>> com.telenor.claudia.web.gui.Index$StatusTimer@95ef17 on component
>> [TextArea
>> [Component id = feedbackPanel]] threw an exception
>>        at
>> org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:270)
>>        at
>> org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
>>        at
>> org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:255)
>>        at
>> org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
>>        at
>> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:750)
>>        at
>> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
>>        at
>> org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:252)
>>        at
>> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:209)
>>        at
>> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:280)
>>        at
>> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:162)
>>        at
>> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:218)
>>        at
>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
>>        at
>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
>>        at
>> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>>        at
>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>>        at
>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>>        at
>> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>>        at
>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>>        at org.mortbay.jetty.Server.handle(Server.java:324)
>>        at
>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>>        at
>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
>>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
>>        at
>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>>        at
>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>>        at
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>>        at
>> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
>> Caused by: java.lang.reflect.InvocationTargetException
>>        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
>>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>        at java.lang.reflect.Method.invoke(Unknown Source)
>>        at
>> org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:260)
>>        ... 25 more
>> Caused by: java.lang.IllegalStateException: Behavior must be added to
>> component before its id can be generated. Behavior:
>> com.telenor.claudia.web.gui.Index$StatusTimer@95ef17, Component:
>> org.apache.wicket.Behaviors@d91987
>>        at org.apache.wicket.Behaviors.getBehaviorId(Behaviors.java:252)
>>        at org.apache.wicket.Component.getBehaviorId(Component.java:4436)
>>        at org.apache.wicket.Component.urlFor(Component.java:3292)
>>        at
>> org.apache.wicket.behavior.AbstractAjaxBehavior.getCallbackUrl(AbstractAjaxBehavior.java:89)
>>        at
>> org.apache.wicket.ajax.AbstractAjaxTimerBehavior.getCallbackScript(AbstractAjaxTimerBehavior.java:125)
>>        at
> 
> If you stop the timer behavior in onTimer() then #getJsTimeoutCall()
> wont be called at all.
> Check your code again and attach the debugger to see what happens.
> 
>> org.apache.wicket.ajax.AbstractAjaxTimerBehavior.getJsTimeoutCall(AbstractAjaxTimerBehavior.java:118)
> 

I consistently get the same problem. After the onTimer() method finishes,
the focus of control goes to the conditional statement below (inside
AbstractAjaxTimerBehavior#respond()):

if (!stopped && isEnabled(getComponent()))
{
 
target.getHeaderResponse().renderOnLoadJavaScript(getJsTimeoutCall(updateInterval));
}

Since the timer has not been stopped (stopped=false), the condition is true
and getJsTimeoutCall() is invoked. Whether this is a bug or not I let you
decide. I attach some classes that show the problem (when this.stop();
inside onTimer() is removed).

Cheers,
Humberto http://apache-wicket.1842946.n4.nabble.com/file/n4306732/src.zip
src.zip 

--
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/Update-component-after-background-thread-is-finished-tp4300126p4306732.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to