我正在尝试使用已设计的某种登录页面调试现有应用。但是,当我在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的新手,所以任何建议都将不胜感激。
答案 0 :(得分:1)
看看失败的断言是什么:
public static TextBox wrap(Element element) {
// Assert that the element is attached.
assert Document.get().getBody().isOrHasChild(element);
这意味着您需要在RootPanel.get("content").add(panel);
之前TextBox.wrap()
。
除之外,它也不会工作。它之后会失败,因为包装的元素位于一个小部件(HTMLPanel
)中。
您需要做的是从HTML字符串中删除<input>
并将ID添加到<td>
,构建您的TextBox
和PasswordBox
,就像常规小部件一样,然后使用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文件