可以在GWT的RPC调用的onFailure()
方法中抛出异常吗?因为这个方法将在稍后调用,在服务器响应之后,我道歉,这里可能会发生一些不好的事情。
例如:
public void method() {
try {
rpc.invoke(new AsyncCallback<Void>() {
@Override
public void onSuccess(Void arg0) {}
@Override
public void onFailure(Throwable arg0) {
throw new RuntimeException("Error message"); //HERE
}
});
}
catch (Exception e) {
Window.alert(e.getMessage()); // AND CATCH ABOVE EXCEPTION HERE
}
}
答案 0 :(得分:1)
我通常在GWT项目中使用以下方法:
1)创建一个MyExceptionsHandler:
@Singleton
public class MyExceptionsHandler implements
GWT.UncaughtExceptionHandler,
RpcFailureEvent.Handler, // create corresponding GwtEvent-s
AnyOtherErrorEvent.Handler {
public MyExceptionsHandler(EventBus evenBus) {
eventBus.addHandler(RpcFailureEvent.TYPE, this);
eventBus.addHandler(AnyOtherErrorEvent.TYPE, this);
}
// implement corresponding methods for interfaces
}
2)入口点:
GWT.setUnchaughtExceptionHandler(myExceptionHandler);
3)在任何其他地方,你有一个错误,你不知道如何处理:
rpc.invoke(new AsyncCallback<Void>() {
@Override
public void onSuccess(Void arg0) {}
@Override
public void onFailure(Throwable arg0) {
eventBus.fireEvent(new RpcFailureEvent(<any context info you think helpful>));
}
});
答案 1 :(得分:0)
然而,您可以尝试使用GWT.setUncaughtExceptionHandler(),请参阅http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/core/client/GWT.html处的详细信息。
答案 2 :(得分:0)
是的,这是可能的。
@Override
public void onFailure(Throwable arg0) {
throw new RuntimeException(arg0);
}
此代码绝对有效。但是你创建和抛出RuntimeException
的新实例的目的是什么?
如果你写的话
new RuntimeException("Error message")
您将丢失有关发生的异常的所有信息。
并且不要忘记在GWT中,所有从客户端到远程服务的调用都是异步处理的。当异步调用无法正常完成时,onFailure()回调方法立即被调用。