运行 GWT 应用程序时出现异常
Posted
技术标签:
【中文标题】运行 GWT 应用程序时出现异常【英文标题】:Exception while running GWT application 【发布时间】:2012-10-05 10:16:01 【问题描述】:我已经构建了我的第一个 GWT 应用程序。不给出编译错误也不给出运行时错误。但是,当应用程序加载到浏览器中(使用内部资源管理器)并且我输入 username 和 password 字段来验证用户时,它会引发异常。使用 GWT-RPC 方法,提供了完整的代码和接口。 我正在使用 HSQL 进行数据库连接(后端)。
------------------代码(客户端)
package com.vin.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
public class HelloWorld implements EntryPoint
private UserServiceAsync UserService = (UserServiceAsync) GWT.create(UserService.class);
public void onModuleLoad()
Button click=new Button("Click Here");
Label name=new Label("Enter Name");
Label passwrd=new Label("Enter Password");
final TextBox t_name=new TextBox();
final PasswordTextBox t_passwrd=new PasswordTextBox();
click.addClickHandler(new ClickHandler()
public void onClick(ClickEvent ev)
String temp_user=t_name.getText();
String temp_pass=t_passwrd.getText();
UserService.loginuser(temp_user, temp_pass, new AsyncCallback<String>()
public void onFailure(Throwable caught)
Window.alert("Please enter valid details");
public void onSuccess(String result)
Window.alert("Welcome");
// Window.open("http://127.0.0.1:8888/ExWid.html?gwt.codesvr=127.0.0.1:9997", "Dem", null);
);
);
RootPanel.get().add(name);
RootPanel.get().add(t_name);
RootPanel.get().add(passwrd);
RootPanel.get().add(t_passwrd);
RootPanel.get().add(click);
------------------客户端界面(1)
package com.vin.client;
import com.google.gwt.user.client.rpc.RemoteService;
public interface UserService extends RemoteService
public String loginuser(String username, String password);
----------------客户端异步接口
package com.vin.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface UserServiceAsync
public void loginuser(String username, String password, AsyncCallback<String> callback);
--------------客户端USERSERVICE(服务器)的实现...数据库连接
package com.vin.server;
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.google.gwt.dev.generator.ast.Statement;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.vin.client.UserService;
public class UserServiceImpl extends RemoteServiceServlet implements UserService
private static final long serialVersionUID = 1L;
public String loginuser(String username,String password)
try
java.sql.Connection con = null;
Class.forName("org.hsqldb.jdbcDriver");
con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/", "SA", "");
Statement st=(Statement) con.createStatement();
ResultSet rs=((java.sql.Statement) st).executeQuery("select username,password from lgfrm");
String user=rs.getString(1);
String pass=rs.getString(2);
if(username.equals(user) && password.equals(pass))
Window.alert("success");
catch (Exception ae)
return "success";
------------------我尝试验证用户时的异常列表
15:22:54.583 [ERROR] [helloworld] 未捕获的异常已转义 com.google.gwt.event.shared.UmbrellaException:一个或多个异常 抓到,请参阅 UmbrellaException#getCauses 中的完整集 在 com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129) 在 com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129) 在 com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 在 com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177) 在 com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351)
还有更多类似的。
【问题讨论】:
【参考方案1】:com.google.gwt.user.client.Window 类提供对浏览器窗口的方法、属性和事件的访问。所以你不能在服务器端使用它。最好在满足要求时返回String "success"
,否则返回Exception
,以便在客户端被onFailure
捕获。
【讨论】:
【参考方案2】:我认为您不能在服务器端使用 Window.alert(在 UserServiceImpl 类中)。可能有很多客户端,服务器无法知道它指向哪个客户端。
但我不确定它是否会导致此错误。
【讨论】:
以上是关于运行 GWT 应用程序时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
GWT:为 com.extjs.gxt.ui.client.data.BaseListLoadResult 分派传入 RPC 调用时出现异常
分派传入 RPC 调用时出现异常 java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest
GWT - 仅在 Internet Explorer 中设置 document.domain 时出现“拒绝访问”JavaScript 错误