是否可以在GWT中将堆栈跟踪打印到字符串?我认为在java.io中使用类的常用方法不起作用,因为java.io包在客户端不可用(而Writer,PrintWriter等在该包中)
谢谢
答案 0 :(得分:12)
我不确定StackTraceElement是否被模拟,但如果是,你可以运行像
这样的东西for (StackTraceElement element : exception.getStackTrace()) {
string += element + "\n";
}
答案 1 :(得分:9)
这是我用来在GWT中检索完整堆栈跟踪作为String
的方法:
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;
}
答案 2 :(得分:3)
我不建议尝试在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
答案 3 :(得分:0)
使用com.google.gwt.logging.impl.StackTracePrintStream
Throwable t = ...;
StringBuilder message = new StringBuilder();
StackTracePrintStream ps = new StackTracePrintStream(message);
t.printStackTrace(ps);
ps.flush();