add stack trace to error dialog

This commit is contained in:
BetaSteward 2011-08-31 22:30:18 -04:00
parent d387d5afa2
commit f67aaf80cf
7 changed files with 38 additions and 12 deletions

View file

@ -190,6 +190,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
connectDialog = new ConnectDialog();
desktopPane.add(connectDialog, JLayeredPane.POPUP_LAYER);
errorDialog = new ErrorDialog();
errorDialog.setLocation(100, 100);
desktopPane.add(errorDialog, JLayeredPane.POPUP_LAYER);
ui.addComponent(MageComponents.DESKTOP_PANE, desktopPane);

View file

@ -49,6 +49,7 @@ public class ErrorDialog extends MageDialog {
public void showDialog(String title, String message) {
this.setTitle(title);
this.lblMessage.setText(message);
this.lblMessage.setCaretPosition(0);
this.pack();
this.revalidate();
this.repaint();

View file

@ -118,7 +118,7 @@ public class GameController implements GameCallback {
revealCards(event.getMessage(), event.getCards());
break;
case ERROR:
error(event.getMessage());
error(event.getMessage(), event.getException());
break;
}
} catch (MageException ex) {
@ -505,10 +505,16 @@ public class GameController implements GameCallback {
}
}
private void error(String message) {
String msg = message + "\nServer version: " + Main.getVersion().toString();
private void error(String message, Exception ex) {
StringBuilder sb = new StringBuilder();
sb.append(message).append(ex.toString());
sb.append("\nServer version: ").append(Main.getVersion().toString());
sb.append("\n");
for (StackTraceElement e: ex.getStackTrace()) {
sb.append(e.toString()).append("\n");
}
for (final Entry<UUID, GameSession> entry: gameSessions.entrySet()) {
entry.getValue().gameError(msg);
entry.getValue().gameError(sb.toString());
}
}

View file

@ -134,7 +134,7 @@ public interface Game extends MageItem, Serializable {
public void fireInformEvent(String message);
public void fireUpdatePlayersEvent();
public void informPlayers(String message);
public void fireErrorEvent(String message);
public void fireErrorEvent(String message, Exception ex);
//game event methods
public void fireEvent(GameEvent event);

View file

@ -555,7 +555,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
}
catch (Exception ex) {
logger.fatal("Game exception ", ex);
this.fireErrorEvent("Game exception occurred: " + ex.getMessage() + " - " + ex.getStackTrace()[0]);
this.fireErrorEvent("Game exception occurred: ", ex);
restoreState(bookmark);
bookmark = 0;
continue;
@ -569,7 +569,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
}
} catch (Exception ex) {
logger.fatal("Game exception ", ex);
this.fireErrorEvent("Game exception occurred: " + ex.getMessage() + " - " + ex.getStackTrace()[0]);
this.fireErrorEvent("Game exception occurred: ", ex);
} finally {
resetLKI();
}
@ -890,8 +890,8 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
}
@Override
public void fireErrorEvent(String message) {
tableEventSource.fireTableEvent(EventType.ERROR, message, this);
public void fireErrorEvent(String message, Exception ex) {
tableEventSource.fireTableEvent(EventType.ERROR, message, ex, this);
}
@Override

View file

@ -52,6 +52,7 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
private Draft draft;
private EventType eventType;
private String message;
private Exception ex;
private Cards cards;
private UUID playerId;
private Deck deck;
@ -64,14 +65,23 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
this.eventType = eventType;
}
public TableEvent(EventType eventType, String message, Cards cards, Game game) {
public TableEvent(EventType eventType, String message, Game game) {
super(game);
this.game = game;
this.message = message;
this.cards = cards;
this.eventType = eventType;
}
public TableEvent(EventType eventType, String message, Cards cards, Game game) {
this(eventType, message, game);
this.cards = cards;
}
public TableEvent(EventType eventType, String message, Exception ex, Game game) {
this(eventType, message, game);
this.ex = ex;
}
public TableEvent(EventType eventType, UUID playerId, Deck deck, int timeout) {
super(playerId);
this.playerId = playerId;
@ -110,6 +120,10 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
return message;
}
public Exception getException() {
return ex;
}
public Cards getCards() {
return cards;
}

View file

@ -56,7 +56,11 @@ public class TableEventSource implements EventSource<TableEvent>, Serializable {
}
public void fireTableEvent(EventType eventType, String message, Game game) {
dispatcher.fireEvent(new TableEvent(eventType, message, null, game));
dispatcher.fireEvent(new TableEvent(eventType, message, game));
}
public void fireTableEvent(EventType eventType, String message, Exception ex, Game game) {
dispatcher.fireEvent(new TableEvent(eventType, message, ex, game));
}
public void fireTableEvent(EventType eventType, String message, Draft draft) {