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" 行为,因此请确保在部署到您附近的服务器之前重新编译您的应用程序。
对于这个模糊的标题,我深表歉意,但我真的不知道问题出在哪里,也不知道我还能在哪里解决它。我正在创建一个名为 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 tohttp://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" 行为,因此请确保在部署到您附近的服务器之前重新编译您的应用程序。