0

可以在onFailure()GWT 的 RPC 调用的方法内抛出异常吗?因为这个方法稍后会被调用,在服务器响应之后,我很抱歉这里可能会发生一些不好的事情..

例如:

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
       }

    }
4

3 回答 3

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>));
   }
});
于 2012-11-08T20:16:36.520 回答
0

是的,这是可能的。

@Override
public void onFailure(Throwable arg0) {
  throw new RuntimeException(arg0);
}

此代码绝对有效。但是你创建和抛出一个新实例的目的是什么RuntimeException

那如果你写

new RuntimeException("Error message")

您将丢失有关已发生异常的所有信息。

不要忘记,在 GWT 中,所有从客户端到远程服务的调用都是异步处理的。而onFailure()回调方法在异步调用无法正常完成时立即调用。

于 2012-11-08T15:21:25.767 回答
0

不,你不能。好吧,您可以抛出异常,但它不会由您定义的 catch 块处理,因为 AsyncCallback 是一个匿名类,它不在同一范围内运行,并且不会与您的 catch 块同时调用。

但是,您可以尝试使用 GWT.setUncaughtExceptionHandler(),请参阅http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/core/client/GWT.html中的详细信息。

于 2012-11-08T15:03:16.570 回答