Saturday, February 20, 2010

Re: Could not wrap a PopupPanel as a Composite!

It seems the PopupPanel will try to remove itself from its parent each
time of showing. The parent in this case is a composite which does not
implement HasWidgets, hence the exception.
Is this my misuse of PopupPanel or a GWT bug?

On Feb 21, 12:30 am, Tatchan <tatcha...@gmail.com> wrote:
> Hi,
>
> I always  get the exception: "java.lang.IllegalStateException: This
> widget's parent does not implement HasWidgets" while trying to use a
> Composite which wraps a PopupPanel.
> A simple example:
>
> // The main application window
> public class AppWindow extends Composite {
>         private final PopupPanel panel = new PopupPanel(true);
>
>         public AppWindow() {
>                 initWidget(panel);
>         }
>
>         public void show() {
>                 panel.setSize("300px", "300px");
>                 panel.add(new Label("Application Window"));
>                 panel.show();
>         }
>
> }
>
> // A button to trigger the application window
> public class AppButton extends Composite {
>         private final Button button = new Button("App");
>         private final AppWindow window;
>
>         public AppButton(AppWindow window) {
>                 this.window = window;
>                 button.addClickHandler(new ClickHandler() {
>                         @Override
>                         public void onClick(ClickEvent event) {
>                                 AppButton.this.window.show();
>                         }
>                 });
>
>                 initWidget(button);
>         }
>
> }
>
> // Entry
> public class Ping implements EntryPoint {
>         @Override
>         public void onModuleLoad() {
>                 AppWindow window = new AppWindow();
>                 AppButton button = new AppButton(window);
>                 RootPanel.get().add(button);
>         }
>
> }
>
> Now click the button I always get the expected exception :) . It's the
> same if the trigger is done via an event bus (i.e., the AppButton
> fires an event, the AppWindow catchs the event and show it self).
>
> Note that it's ok if AppWindow does NOT extend Composite.
>
> Could someone explain please?
>
> The stack trace:
>
> 00:29:42.628 [ERROR] [ping] Uncaught exception escaped
> java.lang.IllegalStateException: This widget's parent does not
> implement HasWidgets
>     at
> com.google.gwt.user.client.ui.Widget.removeFromParent(Widget.java:127)
>     at
> com.google.gwt.user.client.ui.ComplexPanel.add(ComplexPanel.java:84)
>     at
> com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:75)
>     at com.google.gwt.user.client.ui.PopupPanel
> $ResizeAnimation.onInstantaneousRun(PopupPanel.java:311)
>     at com.google.gwt.user.client.ui.PopupPanel
> $ResizeAnimation.setState(PopupPanel.java:208)
>     at
> com.google.gwt.user.client.ui.PopupPanel.setState(PopupPanel.java:
> 1374)
>     at com.google.gwt.user.client.ui.PopupPanel.show(PopupPanel.java:
> 969)
>     at com.oneo.ping.client.test.AppWindow.show(AppWindow.java:18)
>     at com.oneo.ping.client.test.AppButton$1.onClick(AppButton.java:
> 17)
>     at
> com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:
> 54)
>     at
> com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1)
>     at com.google.gwt.event.shared.HandlerManager
> $HandlerRegistry.fireEvent(HandlerManager.java:65)
>     at com.google.gwt.event.shared.HandlerManager
> $HandlerRegistry.access$1(HandlerManager.java:53)
>     at
> com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:
> 178)
>     at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:52)
>     at
> com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:
> 116)
>     at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:
> 100)
>     at
> com.google.gwt.user.client.ui.Composite.onBrowserEvent(Composite.java:
> 54)
>     at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1307)
>     at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1263)
>     at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
> 25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
>     at
> com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
>     at
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
> 157)
>     at
> com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:
> 1713)
>     at
> com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:
> 165)
>     at
> com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:
> 120)
>     at
> com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
> 507)
>     at
> com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:
> 264)
>     at
> com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:
> 91)
>     at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
>     at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)
>     at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
> 25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
>     at
> com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
>     at
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:
> 157)
>     at
> com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:
> 1668)
>     at
> com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:
> 401)
>     at
> com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:
> 222)
>     at java.lang.Thread.run(Thread.java:619)

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate