GWT问候语 - 示例不工作/奇怪的行为

时间:2015-06-01 18:38:12

标签: java eclipse gwt

我很抱歉这个模糊的标题,但我真的不知道问题是什么以及我可以在哪里照顾它。我正在创建一个名为test的项目,让Eclipse生成默认的服务器问候示例。

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

  

但只有我去 http://127.0.0.1:8888/Test.html。出于某种原因,如果我转到http://127.0.0.1:8888/Test.html?gwt.codesvr=127.0.0.1:9997,即使插件已安装并正在运行,Chrome也会告诉我为GWT安装浏览器插件。

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

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就不会就此止步。

如果我是将System.out.println()放到onModuleLoad()的第一行我也没有收到该消息..

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

在“开发模式”视图中单击Eclipse提供的“重新加载Web服务器”按钮也无济于事。唯一有效的是重新编译整个项目(这需要很长时间),但只有显示的内容才会更新 - 断点不会被击中,.println()仍然不会输出任何内容。

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

2 个答案:

答案 0 :(得分:0)

如果您想以调试模式运行应用程序(意味着您更改了任何内容并且在重新加载时它开始反映到浏览器中),您必须使用URL http://127.0.0.1:8888/Test.html?gwt.codesvr=127.0.0.1:9997。以上URL显示您的服务器正在以GWT支持的开发模式运行。此服务器的开发模式使您可以调试应用程序。仅使用http://127.0.0.1:8888/Test.html时,它表示您正在使用服务器的Web模式。这不允许您进行调试。因此,您必须重新编译并重新部署应用程序以查看更改。 简而言之,需要GWT开发模式来调试应用程序。这是因为实际上你正在尝试调试javascript,因为你在GWT中编写的所有内容最终都会在GWT编译后转换为javascript。

答案 1 :(得分:0)

不推荐使用GWT DevMode浏览器插件;他们不再在Firefox中工作超过一年,而在Chrome中工作几个月(取决于您的操作系统);唯一支持的浏览器仍然是IE (万一你想知道:Firefox已经削减了对插件所需的一些API的访问权限,Chrome正在关闭对NPAPI插件的支持)

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