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 に答える