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(); connectDialog = new ConnectDialog();
desktopPane.add(connectDialog, JLayeredPane.POPUP_LAYER); desktopPane.add(connectDialog, JLayeredPane.POPUP_LAYER);
errorDialog = new ErrorDialog(); errorDialog = new ErrorDialog();
errorDialog.setLocation(100, 100);
desktopPane.add(errorDialog, JLayeredPane.POPUP_LAYER); desktopPane.add(errorDialog, JLayeredPane.POPUP_LAYER);
ui.addComponent(MageComponents.DESKTOP_PANE, desktopPane); ui.addComponent(MageComponents.DESKTOP_PANE, desktopPane);

View file

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

View file

@ -118,7 +118,7 @@ public class GameController implements GameCallback {
revealCards(event.getMessage(), event.getCards()); revealCards(event.getMessage(), event.getCards());
break; break;
case ERROR: case ERROR:
error(event.getMessage()); error(event.getMessage(), event.getException());
break; break;
} }
} catch (MageException ex) { } catch (MageException ex) {
@ -505,10 +505,16 @@ public class GameController implements GameCallback {
} }
} }
private void error(String message) { private void error(String message, Exception ex) {
String msg = message + "\nServer version: " + Main.getVersion().toString(); 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()) { 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 fireInformEvent(String message);
public void fireUpdatePlayersEvent(); public void fireUpdatePlayersEvent();
public void informPlayers(String message); public void informPlayers(String message);
public void fireErrorEvent(String message); public void fireErrorEvent(String message, Exception ex);
//game event methods //game event methods
public void fireEvent(GameEvent event); 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) { catch (Exception ex) {
logger.fatal("Game 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); restoreState(bookmark);
bookmark = 0; bookmark = 0;
continue; continue;
@ -569,7 +569,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
} }
} catch (Exception ex) { } catch (Exception ex) {
logger.fatal("Game exception ", ex); logger.fatal("Game exception ", ex);
this.fireErrorEvent("Game exception occurred: " + ex.getMessage() + " - " + ex.getStackTrace()[0]); this.fireErrorEvent("Game exception occurred: ", ex);
} finally { } finally {
resetLKI(); resetLKI();
} }
@ -890,8 +890,8 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
} }
@Override @Override
public void fireErrorEvent(String message) { public void fireErrorEvent(String message, Exception ex) {
tableEventSource.fireTableEvent(EventType.ERROR, message, this); tableEventSource.fireTableEvent(EventType.ERROR, message, ex, this);
} }
@Override @Override

View file

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

View file

@ -56,7 +56,11 @@ public class TableEventSource implements EventSource<TableEvent>, Serializable {
} }
public void fireTableEvent(EventType eventType, String message, Game game) { 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) { public void fireTableEvent(EventType eventType, String message, Draft draft) {