GWT Greeting-Example 不工作/奇怪的行为

GWT Greeting-Example not working / strange behavior

对于这个模糊的标题,我深表歉意,但我真的不知道问题出在哪里,也不知道我还能在哪里解决它。我正在创建一个名为 test 的项目,并让 Eclipse 生成默认的 server-greeting 示例。

如果我创建一个 GWT 项目,right-click 它并执行 "GWT Compile" 命令,一切正常。然后我的应用程序在 http://127.0.0.1:8888/Test.html?gwt.codesvr=127.0.0.1:9997 可用并且到目前为止正确显示 -

but only if I go to http://127.0.0.1:8888/Test.html. For some reason Chrome tells me to install the browser plugin for GWT if I go to http://127.0.0.1:8888/Test.html?gwt.codesvr=127.0.0.1:9997 even though the plugin is installed and running.

但是,如果我对代码进行任何更改,例如更改:

public void onModuleLoad() {
    // ...
    RootPanel.get("nameFieldContainer").add(nameField);
    RootPanel.get("sendButtonContainer").add(sendButton);
    RootPanel.get("errorLabelContainer").add(errorLabel);
    // ...
}

public void onModuleLoad() {
    // ...
    RootPanel.get("nameFieldContainer").add(nameField);
    //RootPanel.get("sendButtonContainer").add(sendButton);
    RootPanel.get("errorLabelContainer").add(errorLabel);
    // ...
}

在生成的 Test.java 文件中,更改未反映在网站上。如果我刷新浏览器 (Ctrl+F5) 或明确清除浏览器历史记录,则不会。

另一个奇怪的事情是我不能调试Java代码。如果我在 onModuleLoad() 的某处设置断点,Eclipse 不会停在那里。

如果我在 onModuleLoad() 的第一行添加 System.out.println() 我也没有收到该消息..

public void onModuleLoad() {
    System.out.println("##########"); // Not working either
    // ...
}

在开发模式视图中单击 Eclipse 提供的 "Reload web server" 按钮也无济于事。唯一有效的是 re-compiling 整个项目(这需要很长时间)但是只有显示的内容得到更新 - 断点没有被击中并且 .println() 仍然没有输出任何东西。

这真令人沮丧 - 有人知道我做错了什么吗?如果您需要更多信息来帮助我,请告诉我。

如果您想 运行 您的应用程序处于调试模式(意味着您更改的任何内容都会在重新加载时反映到浏览器),您必须使用 URL http://127.0.0.1:8888/Test.html?gwt.codesvr=127.0.0.1:9997. Above URL shows your server is running in dev mode supported by GWT. This dev mode of server enables you to debug the application. When you use only http://127.0.0.1:8888/Test.html,它显示您正在使用服务器的 Web 模式。这不允许您调试。所以你必须重新编译并重新部署你的应用程序才能看到变化。 简而言之,需要 GWT 开发模式来调试应用程序。这是因为实际上您正在尝试调试 javascript 因为您在 GWT 中编写的所有内容在 GWT 编译后最终都会转换为 javascript。

GWT DevMode 浏览器插件已弃用;他们不再在 Firefox 中工作超过一年,在 Chrome 中工作几个月(取决于你的 OS);唯一支持的浏览器仍然是 IE。
(如果您想知道:Firefox 一直在切断对插件所需的某些 API 的访问,并且 Chrome 正在完全关闭对 NPAPI 插件的支持)

对于一些版本,GWT 提供了一个名为 SuperDevMode 的新 DevMode,它可以在 JS 中运行您的代码。从 GWT 2.7 开始,当您启动 DevMode 时,您实际上是在使用具有新 "compile on load" 模式的 SuperDevMode,除非您通过传递 -nosuperDevMode 参数明确请求 "classic" DevMode。
GWT 2.7 带有一个增量编译器,使刷新速度比以前快得多(在某些 – 许多 – 情况下甚至比 "classic" DevMode 快),这就是默认情况下打开 SuperDevMode 的原因。
因为代码现在已编译为 JS,所以您不再在 IDE 中设置断点,而是在浏览器的开发工具中使用 SourceMaps 查看您的 Java 代码而不是编译后的 JS。然而,有一个 plugin for Eclipse 使用其远程调试协议连接到 Chrome,因此您可以直接在 Eclipse 中设置断点;和 IntelliJ IDEA 有类似的支持。
然而,不再需要浏览器插件意味着它可以在任何地方运行,包括您的智能手机。
最后但并非最不重要的一点是,SuperDevMode(又名 CodeServer)会用特定的 *.nocache.js 覆盖您的 "compile on load" 行为,因此请确保在部署到您附近的服务器之前重新编译您的应用程序。