diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 19636fcb5b8..b0b61071222 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -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); diff --git a/Mage.Client/src/main/java/mage/client/dialog/ErrorDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ErrorDialog.java index 63b49634e88..6731b5cc67b 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ErrorDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ErrorDialog.java @@ -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(); diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 3d752db72d4..265cc1ab0f4 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -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 entry: gameSessions.entrySet()) { - entry.getValue().gameError(msg); + entry.getValue().gameError(sb.toString()); } } diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index a0ab590c831..c1be2ee37df 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -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); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index ea7fc019ce0..2fbace19615 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -555,7 +555,7 @@ public abstract class GameImpl> 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> 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> 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 diff --git a/Mage/src/mage/game/events/TableEvent.java b/Mage/src/mage/game/events/TableEvent.java index c0b75938421..8fa5f4bd78f 100644 --- a/Mage/src/mage/game/events/TableEvent.java +++ b/Mage/src/mage/game/events/TableEvent.java @@ -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; @@ -109,6 +119,10 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab public String getMessage() { return message; } + + public Exception getException() { + return ex; + } public Cards getCards() { return cards; diff --git a/Mage/src/mage/game/events/TableEventSource.java b/Mage/src/mage/game/events/TableEventSource.java index bfb1bf00010..0508c0c2178 100644 --- a/Mage/src/mage/game/events/TableEventSource.java +++ b/Mage/src/mage/game/events/TableEventSource.java @@ -56,7 +56,11 @@ public class TableEventSource implements EventSource, 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) {