0

我正在尝试使用已经设计的某种登录页面来调试现有应用程序。但是,当我在 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);

该应用程序似乎一直运行到“最终文本框..”代码行,但是当我按下恢复时,我得到了错误。

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

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

4

2 回答 2

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)中。

您需要做的是<input>从 HTML 字符串中删除 并将 ID 添加到<td>,构建您的TextBoxPasswordBox喜欢的常规小部件,然后使用add(Widget,String)将它们<td>放在HTMLPanel.

根据您需要做的事情,也许您不需要s 作为小部件,在这种情况<input>下,只需getElementById将结果用于.HTMLPanelcast()InputElement

于 2012-12-11T10:24:21.690 回答
-1

调试并检查是否返回 null ......如果为 null,请在您的 html 文件中创建一个具有该panel.getElementById("loginuser")id的divpanel.getElementById("loginpass") RootPanel.get("content")

于 2012-12-11T04:57:20.027 回答