我试图编写一个代码,该代码将捕获由ServiceImpl
引发的PhoneNumberInUseException
,但下面的代码始终适用于else
语句。使用GWT处理自定义异常
@Override
public void onFailure(Throwable caught) {
Window.alert("Failed create account.");
if (caught instanceof PhoneNumberInUseException) {
Window.alert("Sorry, but the phone number is already used.");
} else {
Window.alert(caught.toString());
}
}
的PhoneNumberInUseException extends RuntimeException
现在我只是显示这个通过Window.alert,但是我会做客户端逻辑处理异常,这就是为什么我不能简单地用IllegalArgumentException
这可以很好地将异常字符串从服务器传递到客户端。
我错过了什么吗?
实际上,你可能正好保持你的代码,因为它并且只是声明你的RPC方法抛出了这个异常:'public void doSomething(Object someObject)throws PhoneNumberInUseException;'。如果GWT通过'throws'显式声明,那么GWT只会将'RuntimeException'传播给客户端。 –
@ChrisCashwell我看到,我使用RuntimeException的原因是因为我需要在if-else语句内引发异常,而如果从Exception扩展,我得到语法错误。 – xybrek
更新了我的答案。 –