merge change to show dialog when game crashes
commit
6d05fb4293
|
@ -2,10 +2,12 @@ package magic.model;
|
||||||
|
|
||||||
import magic.MagicMain;
|
import magic.MagicMain;
|
||||||
import magic.data.FileIO;
|
import magic.data.FileIO;
|
||||||
|
import magic.data.URLUtils;
|
||||||
import magic.model.action.MagicAction;
|
import magic.model.action.MagicAction;
|
||||||
import magic.model.stack.MagicItemOnStack;
|
import magic.model.stack.MagicItemOnStack;
|
||||||
import magic.ui.VersionPanel;
|
import magic.ui.VersionPanel;
|
||||||
|
|
||||||
|
import java.awt.Desktop;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
@ -13,13 +15,58 @@ import java.io.StringWriter;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
public class MagicGameReport implements Thread.UncaughtExceptionHandler {
|
public class MagicGameReport implements Thread.UncaughtExceptionHandler {
|
||||||
|
|
||||||
public void uncaughtException(final Thread th, final Throwable ex) {
|
public void uncaughtException(final Thread th, final Throwable ex) {
|
||||||
MagicGameReport.buildReport(MagicGame.getInstance(), th, ex);
|
MagicGameReport.buildReport(MagicGame.getInstance(), th, ex);
|
||||||
|
doNotifyUser();
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a message to user in the event an unexpected exception occurs.
|
||||||
|
* User can open logs folder and/or Issue tracker directly from this dialog.
|
||||||
|
*/
|
||||||
|
private void doNotifyUser() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
// By specifying a frame the JOptionPane will be shown in the taskbar.
|
||||||
|
// Otherwise if the dialog is hidden it is easy to forget it is still open.
|
||||||
|
JFrame frame = new JFrame("Fatal Error");
|
||||||
|
frame.setUndecorated(true);
|
||||||
|
frame.setVisible(true);
|
||||||
|
frame.setLocationRelativeTo(null);
|
||||||
|
|
||||||
|
// Custom option dialog.
|
||||||
|
Object[] options = {"Open logs folder", "Issue Tracker", "Close"};
|
||||||
|
int action = -1;
|
||||||
|
do {
|
||||||
|
action = JOptionPane.showOptionDialog(
|
||||||
|
frame,
|
||||||
|
"An unexpected error has occurred and Magarena will need to close.\n\n" +
|
||||||
|
"Please consider posting the crash report (\"crash.log\") to the Magarena\n" +
|
||||||
|
"forum or Issue Tracker so that the development team can investigate.\n\n",
|
||||||
|
"Fatal Error",
|
||||||
|
JOptionPane.YES_NO_CANCEL_OPTION,
|
||||||
|
JOptionPane.ERROR_MESSAGE,
|
||||||
|
null,
|
||||||
|
options,
|
||||||
|
options[2]);
|
||||||
|
if (action == JOptionPane.YES_OPTION) {
|
||||||
|
Desktop.getDesktop().open(new File(MagicMain.getGamePath()));
|
||||||
|
} else if (action == JOptionPane.NO_OPTION) {
|
||||||
|
URLUtils.openURL("http://code.google.com/p/magarena/issues/list");
|
||||||
|
}
|
||||||
|
} while (action != JOptionPane.CANCEL_OPTION && action != -1);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
// do nothing - crash report has already been generated and app is about to exit anyway.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void buildCard(final MagicGame game,final String place,final MagicCard card,final StringBuilder report) {
|
private static void buildCard(final MagicGame game,final String place,final MagicCard card,final StringBuilder report) {
|
||||||
report.append(" - ").append(place).append(" : ").append(card.getName()).append("\n");
|
report.append(" - ").append(place).append(" : ").append(card.getName()).append("\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue