print stacktrace if possible on fatal errors, fixed NPE in paint

This commit is contained in:
Brian Matzon 2009-06-11 21:07:34 +00:00
parent 0c244ee74a
commit ea7e7bdd0c
1 changed files with 32 additions and 12 deletions

View File

@ -48,6 +48,9 @@ import java.io.FilePermission;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.SocketPermission; import java.net.SocketPermission;
@ -237,7 +240,7 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
String[] requiredArgs = {"al_main", "al_logo", "al_progressbar", "al_jars"}; String[] requiredArgs = {"al_main", "al_logo", "al_progressbar", "al_jars"};
for(int i=0; i<requiredArgs.length; i++) { for(int i=0; i<requiredArgs.length; i++) {
if(getParameter(requiredArgs[i]) == null) { if(getParameter(requiredArgs[i]) == null) {
fatalErrorOccured("missing required applet parameter: " + requiredArgs[i]); fatalErrorOccured("missing required applet parameter: " + requiredArgs[i], null);
return; return;
} }
} }
@ -261,7 +264,7 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
//sanity check //sanity check
if(logo == null || progressbar == null) { if(logo == null || progressbar == null) {
fatalErrorOccured("Unable to load logo and progressbar images"); fatalErrorOccured("Unable to load logo and progressbar images", null);
} }
// check for lzma support // check for lzma support
@ -281,6 +284,18 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
} }
} }
/**
* Generates a stacktrace in the form of a string
* @param exception Exception to make stacktrace of
* @return Stacktrace of exception in the form of a string
*/
private String generateStacktrace(Exception exception) {
Writer result = new StringWriter();
PrintWriter printWriter = new PrintWriter(result);
exception.printStackTrace(printWriter);
return result.toString();
}
/* /*
* @see java.applet.Applet#start() * @see java.applet.Applet#start()
*/ */
@ -397,11 +412,13 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
} }
for(int i=0; i<errorMessage.length; i++) { for(int i=0; i<errorMessage.length; i++) {
int messageX = (getWidth() - fm.stringWidth(errorMessage[i])) / 2; if(errorMessage[i] != null) {
int messageY = (getHeight() - (fm.getHeight() * errorMessage.length)) / 2; int messageX = (getWidth() - fm.stringWidth(errorMessage[i])) / 2;
int messageY = (getHeight() - (fm.getHeight() * errorMessage.length)) / 2;
og.setColor(errorColor);
og.drawString(errorMessage[i], messageX, messageY + i*fm.getHeight()); og.setColor(errorColor);
og.drawString(errorMessage[i], messageX, messageY + i*fm.getHeight());
}
} }
} else { } else {
og.setColor(fgColor); og.setColor(fgColor);
@ -517,11 +534,11 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
} else if (osName.startsWith("Solaris") || osName.startsWith("SunOS")) { } else if (osName.startsWith("Solaris") || osName.startsWith("SunOS")) {
nativeJar = getParameter("al_solaris"); nativeJar = getParameter("al_solaris");
} else { } else {
fatalErrorOccured("OS (" + osName + ") not supported"); fatalErrorOccured("OS (" + osName + ") not supported", null);
} }
if (nativeJar == null) { if (nativeJar == null) {
fatalErrorOccured("no lwjgl natives files found"); fatalErrorOccured("no lwjgl natives files found", null);
} else { } else {
nativeJar = trimExtensionByCapabilities(nativeJar); nativeJar = trimExtensionByCapabilities(nativeJar);
urlList[jarCount - 1] = new URL(path, nativeJar); urlList[jarCount - 1] = new URL(path, nativeJar);
@ -626,10 +643,10 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
state = STATE_DONE; state = STATE_DONE;
} catch (AccessControlException ace) { } catch (AccessControlException ace) {
fatalErrorOccured(ace.getMessage()); fatalErrorOccured(ace.getMessage(), ace);
certificateRefused = true; certificateRefused = true;
} catch (Exception e) { } catch (Exception e) {
fatalErrorOccured(e.getMessage()); fatalErrorOccured(e.getMessage(), e);
} finally { } finally {
loaderThread = null; loaderThread = null;
} }
@ -1172,10 +1189,13 @@ public class AppletLoader extends Applet implements Runnable, AppletStub {
* *
* @param error Error message to print * @param error Error message to print
*/ */
protected void fatalErrorOccured(String error) { protected void fatalErrorOccured(String error, Exception e) {
fatalError = true; fatalError = true;
fatalErrorDescription = "Fatal error occured (" + state + "): " + error; fatalErrorDescription = "Fatal error occured (" + state + "): " + error;
System.out.println(fatalErrorDescription); System.out.println(fatalErrorDescription);
if(e != null) {
System.out.println(generateStacktrace(e));
}
repaint(); repaint();
} }