在服务器端,我们有RemoteServiceServlet的子类,可用于所有服务实现。您提到这似乎很耗时,但是代码如下所示。您只需完成一次就可以了。
@Overrideprotected void doUnexpectedFailure(Throwable t) { t.printStackTrace(System.err); super.doUnexpectedFailure(t);}注意:我们实际上并没有将其发送到System.err,您也可能不应该将其发送给System.err,但是您知道了。
在客户端,我们使用AsyncCallback的子类AsyncSuccessCallback。对于大多数RPC调用,它统一处理onFailure情况。我们的大多数回调代码都可以在知道onFailure被处理的情况下处理onSuccess情况。它还提供了一个地方,以后可以更改此实现。
public abstract class AsyncSuccessCallback<T> implements AsyncCallback<T> { public void onFailure(Throwable t) { handleException(t); } protected void handleException(Throwable t) { Window.alert(t.getMessage()); }}注意:实际上,我们实际上并没有使用Window.alert,但您仍然可以理解。在这种情况下,我们要做的是显示一个GWT对话框,该对话框显示一个窗体,该窗体对接收错误报告的其他服务器执行POST。该表格允许用户键入错误发生时他们在做什么的描述。
在客户端,如果要获取堆栈跟踪,则需要编写一些额外的代码:
// for lineEnding, use "<br>" for HTML, "n" for textpublic static final String getStackTrace(Throwable t, String lineEnding) { Object[] stackTrace = t.getStackTrace(); if (stackTrace != null) { StringBuilder output = new StringBuilder(); for (Object line : stackTrace) { output.append(line); output.append(lineEnding); } return output.toString(); } else { return "[stack unavailable]"; }}


