Ответ 1
Я не уверен, что StackTraceElement эмулируется, но если это вы можете запустить что-то вроде
for (StackTraceElement element : exception.getStackTrace()) {
string += element + "\n";
}
Можно ли распечатать трассировку стека в строку в GWT? Обычные методы использования классов в java.io не будут работать, я думаю, потому что пакет java.io недоступен clientide (и 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
исключение stacktrace, полезное для отладки (не для пользователя), вы должны использовать хорошо зарегистрированную функцию ведения журнала GWT с исключениями в веб-режиме -
a) https://developers.google.com/web-toolkit/doc/latest/DevGuideLogging
b) Также читайте на http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions