是否可以将堆栈跟踪打印到 GWT 中的字符串?我认为在 java.io 中使用类的常用方法不起作用,因为 java.io 包在客户端不可用(并且 Writer、PrintWriter 等在该包中)
谢谢
是否可以将堆栈跟踪打印到 GWT 中的字符串?我认为在 java.io 中使用类的常用方法不起作用,因为 java.io 包在客户端不可用(并且 Writer、PrintWriter 等在该包中)
谢谢
我不确定 StackTraceElement 是否被模拟,但如果是,你可以运行类似的东西
for (StackTraceElement element : exception.getStackTrace()) {
string += element + "\n";
}
这是我用来String
在 GWT 中检索完整堆栈跟踪的方法:
private static String getMessage (Throwable throwable) {
String ret="";
while (throwable!=null) {
if (throwable instanceof com.google.gwt.event.shared.UmbrellaException){
for (Throwable thr2 :((com.google.gwt.event.shared.UmbrellaException)throwable).getCauses()){
if (ret != "")
ret += "\nCaused by: ";
ret += thr2.toString();
ret += "\n at "+getMessage(thr2);
}
} else if (throwable instanceof com.google.web.bindery.event.shared.UmbrellaException){
for (Throwable thr2 :((com.google.web.bindery.event.shared.UmbrellaException)throwable).getCauses()){
if (ret != "")
ret += "\nCaused by: ";
ret += thr2.toString();
ret += "\n at "+getMessage(thr2);
}
} else {
if (ret != "")
ret += "\nCaused by: ";
ret += throwable.toString();
for (StackTraceElement sTE : throwable.getStackTrace())
ret += "\n at "+sTE;
}
throwable = throwable.getCause();
}
return ret;
}
我不建议尝试在 GUI 标签中显示错误堆栈跟踪。
1) 在 GWT 混淆后它们不可读。它们看起来就像新行上的一堆制表符对齐的字符。
2) 它们不是 I18N 格式。
3)正确的方法是只向用户显示格式正确的错误“消息”。exception.getMessage() 将为您提供一行非 obf 信息,该信息应为用户提供必要的 UX 交互。
4)如果您正在寻找well formed
有助于调试的异常堆栈跟踪(而不是用户),您应该使用 GWT 的有据可查的日志记录功能和 Web 模式异常 -
a) https://developers.google.com/web-toolkit/doc/latest/DevGuideLogging
b) 另请阅读http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions
使用com.google.gwt.logging.impl.StackTracePrintStream
Throwable t = ...;
StringBuilder message = new StringBuilder();
StackTracePrintStream ps = new StackTracePrintStream(message);
t.printStackTrace(ps);
ps.flush();