调试为Java App - onModuleLoad()错误

时间:2012-12-11 01:47:24

标签: eclipse debugging google-app-engine gwt

我正在尝试使用已设计的某种登录页面调试现有应用。但是,当我在Eclipse中“运行为Java应用程序”时,我收到一个错误:

01:18:30.207 [ERROR] [pzflex_test] Unable to load module entry point class com.wai.pzflex.client.PZFlex_Test (see associated exception for details)
java.lang.AssertionError: null
    at com.google.gwt.user.client.ui.TextBox.wrap(TextBox.java:63)
    at com.wai.pzflex.client.PZFlex_Test.onModuleLoad(PZFlex_Test.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Unknown Source)

以下是我尝试使用Eclipse调试的代码。

public void onModuleLoad() 
    {
        try
        {
        HTMLPanel panel = new HTMLPanel("<table align='center'><tr>" + 
            "<td colspan='2' style='font-weight:bold;'>Please enter your username and password:</td>" +
            "</tr><tr><td>Username: </td><td><input type='text' id='loginuser'></td></tr>" +
            "<tr><td>Password: </td><td><input type='password' id='loginpass'></td></tr>" +
            "<tr><td colspan='2' align='right'><button id='loginbutton'>Login</button></td>" +
            "</tr></table>");

        //final - entity that cannot be changed later
        final TextBox username = TextBox.wrap(panel.getElementById("loginuser"));
        final TextBox pass = TextBox.wrap(panel.getElementById("loginpass"));

        RootPanel.get("content").add(panel);

应用程序似乎一直运行到“最终的Textbox ..”代码行,但是当我按下简历时,我得到了错误。

奇怪的是,我可以进行GWT编译,登录页面似乎加载正常。我不明白为什么在我去调试它时会发生这种情况。

再次,我是Java和整个GWT / GAE的新手,所以任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

看看失败的断言是什么:

public static TextBox wrap(Element element) {
  // Assert that the element is attached.
  assert Document.get().getBody().isOrHasChild(element);

(来源:https://code.google.com/p/google-web-toolkit/source/browse/tags/2.5.0/user/src/com/google/gwt/user/client/ui/TextBox.java#61

这意味着您需要在RootPanel.get("content").add(panel);之前TextBox.wrap()

之外,它也不会工作。它之后会失败,因为包装的元素位于一个小部件(HTMLPanel)中。

您需要做的是从HTML字符串中删除<input>并将ID添加到<td>,构建您的TextBoxPasswordBox,就像常规小部件一样,然后使用add(Widget,String)将其放入<td>中的HTMLPanel

根据您的需要,您可能不需要<input>作为小部件,在这种情况下,只需在getElementById上使用HTMLPanel即可cast()结果为InputElement

答案 1 :(得分:-1)

调试并检查panel.getElementById("loginuser")panel.getElementById("loginpass") RootPanel.get("content")是否返回null ....如果为null,请创建一个 id 的div你的HTML文件