Ah, I see the problem now. This stems from the fact that the two divs are
nested. This could have caused problems eventually in 1.5; what we're seeing
here is that the new assertion I added is catching this problem earlier. To
understand why this is a problem, consider the DOM and widget hierarchies it
creates:
<body>
  <div id="div1">
    <div id="div2"/>
  </div>
</body>

<RootPanel (div1)/>
<RootPanel (div2)/>

This inconsistency (i.e. div1 contains div2, but RootPanel1 does *not*
contain RootPanel2) can lead to problems because the Widget hierarchy
remains blissfully unaware that the RootPanel has child elements that it
needs to account for somehow. I'm working on a wiki document that will
explain this in more detail as well.

Hope this helps,
joel.

On Mon, Mar 9, 2009 at 2:54 PM, aris <[email protected]> wrote:

>
> After trying to create a small sample (I should did that before
> posting), I found that the problem occurs when you call RootPanel.get
> (“div1”)… and then RootPanel.get(“div2”)
> Where div2 is an element that is inside div1.
>
> So the sample will be:
>
> Test1Module.java
> package client;
>
> import com.google.gwt.core.client.EntryPoint;
> import com.google.gwt.user.client.ui.*;
>
> public class Test1Module implements EntryPoint
> {
>    public void onModuleLoad()
>    {
>        RootPanel.get("div1").addStyleName("asdasd");
>        RootPanel.get("div2").addStyleName("asdasd");
>    }
> }
>
>
> Test1Module.html
> <html>
> <head>
>    <title>Test1Module Application</title>
>    <meta name="gwt:module" content="Test1Module">
>    <link rel="stylesheet" href="Test1Module.css">
> </head>
> <body>
>    <script language="javascript" src="Test1Module.nocache.js"></
> script>
>    <iframe id="__gwt_historyFrame" style="width:0;height:0;border:
> 0"></iframe>
>    <h1>Test1Module Application</h1>
>    <div id="div1">
>        <div id="div2">
>        </div>
>    </div>
>
> </body>
> </html>
>
> The full Error msg:
>
> [ERROR] Unable to load module entry point class client.Test1Module
> (see associated exception for details)
> java.lang.AssertionError: A widget that has an existing parent widget
> may not be added to the detach list
>         at com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose
> (RootPanel.java:122)
>        at com.google.gwt.user.client.ui.RootPanel.get(RootPanel.java:197)
>         at client.Test1Module.onModuleLoad(Test1Module.java:11)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:326)
>        at com.google.gwt.dev.shell.BrowserWidget.attachModuleSpace
> (BrowserWidget.java:345)
>        at com.google.gwt.dev.shell.ie.BrowserWidgetIE6.access$300
> (BrowserWidgetIE6.java:37)
>        at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.gwtOnLoad
> (BrowserWidgetIE6.java:77)
>        at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.invoke
> (BrowserWidgetIE6.java:161)
>        at com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke
> (IDispatchImpl.java:294)
>        at com.google.gwt.dev.shell.ie.IDispatchImpl.method6
> (IDispatchImpl.java:194)
>        at com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.method6
> (BrowserWidgetIE6.java:42)
>        at org.eclipse.swt.internal.ole.win32.COMObject.callback6
> (COMObject.java:117)
>        at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
>        at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1925)
>        at
> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
>        at com.google.gwt.dev.SwtHostedModeBase.processEvents
> (SwtHostedModeBase.java:235)
>        at com.google.gwt.dev.HostedModeBase.pumpEventLoop
> (HostedModeBase.java:556)
>        at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:403)
>        at com.google.gwt.dev.GWTShell.main(GWTShell.java:140)
>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>        at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:597)
>        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:
> 90)
>
>
> I only tested it on IE7 using the HostedMode browser.
>
> Thanks
>
>
>
> On Mar 9, 12:36 pm, Joel Webber 𐑯(ټ)𐑥 <[email protected]> wrote:
> > I did make some changes to RootPanell.get(id) recently, but I can't seem
> to
> > reproduce the case you're describing. It also looks like the exception
> stack
> > you posted may have been cut off. Could you post the full exception
> trace?
> > Also, if you can post a code snippet that reproduces the problem, it
> would
> > be very helpful. I just tried the following, which worked fine:
> > In Hello.html:
> >
> >    <div id='foo'></div>
> >
> > In Hello.java:
> >
> >     RootPanel.get("foo").add(new Button("foo"));
> >
> >     RootPanel.get("foo").add(new Button("bar"));
> >
> > It's not inconceivable that I inadvertently broke something that we
> weren't
> > properly testing for, so your help in tracking this down would be greatly
> > appreciated.
> >
> > Cheers,
> > joel.
> >
> >
> >
> > On Sat, Mar 7, 2009 at 11:13 AM, aris <[email protected]> wrote:
> >
> > > Recompiling a project using the build #4955 from SVN throws a lot of
> > > errors, every time I use the RootPanel.get(“id_element”)… I get the
> > > next exception:
> >
> > >        at com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose
> > > (RootPanel.java:122)
> > >        at
> com.google.gwt.user.client.ui.RootPanel.get(RootPanel.java:197)
> >
> > > The first time it happens is inside the onModuleLoad(), I get an
> > > existing element inside the .html file using RootPanel.get(“flash1”)
> > > and that throws the exception
> > > (I checked that the id="flash" element really exists)
> >
> > > Thanks- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to