From: <ka...@us...> - 2011-03-12 21:16:29
|
Revision: 3497 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3497&view=rev Author: kappa1 Date: 2011-03-12 21:16:22 +0000 (Sat, 12 Mar 2011) Log Message: ----------- AppletLoader: implemented headless mode. Use the "al_headless" parameter to enable it. Use liveconnect to access the getStatus() and getMessages() methods to obtain the progress of the AppletLoader. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java Modified: trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java 2011-03-10 21:49:01 UTC (rev 3496) +++ trunk/LWJGL/src/java/org/lwjgl/util/applet/AppletLoader.java 2011-03-12 21:16:22 UTC (rev 3497) @@ -257,7 +257,16 @@ /** whether pack200 is supported */ protected boolean pack200Supported; + + /** whether to run in headless mode */ + protected boolean headless = false; + + /** whether to switch applets in headless mode or wait longer */ + protected boolean headlessWaiting = true; + /** messages to be passed via liveconnect in headless mode */ + protected String[] headlessMessage; + /** generic error message to display on error */ protected String[] genericErrorMessage = { "An error occured while loading the applet.", "Please contact support to resolve this issue.", @@ -273,7 +282,7 @@ /** have natives been loaded by another instance of this applet */ protected static boolean natives_loaded; - + /* * @see java.applet.Applet#init() */ @@ -298,14 +307,19 @@ // whether to prepend host to cache path prependHost = getBooleanParameter("al_prepend_host", true); + // whether to run in headless mode + headless = getBooleanParameter("al_headless", false); + // get colors of applet bgColor = getColor("boxbgcolor", Color.white); setBackground(bgColor); fgColor = getColor("boxfgcolor", Color.black); - // load logos, if value is "" then an image is not loaded - logo = getImage(getStringParameter("al_logo", "appletlogo.gif")); - progressbar = getImage(getStringParameter("al_progressbar", "appletprogress.gif")); + if (!headless) { + // load logos + logo = getImage(getStringParameter("al_logo", "appletlogo.gif")); + progressbar = getImage(getStringParameter("al_progressbar", "appletprogress.gif")); + } // check for lzma support try { @@ -349,17 +363,19 @@ loaderThread.setName("AppletLoader.loaderThread"); loaderThread.start(); - animationThread = new Thread() { - public void run() { - while(loaderThread != null) { - repaint(); - AppletLoader.this.sleep(100); + if (!headless) { + animationThread = new Thread() { + public void run() { + while(loaderThread != null) { + repaint(); + AppletLoader.this.sleep(100); + } + animationThread = null; } - animationThread = null; - } - }; - animationThread.setName("AppletLoader.animationthread"); - animationThread.start(); + }; + animationThread.setName("AppletLoader.animationthread"); + animationThread.start(); + } } } } @@ -403,6 +419,48 @@ } /** + * Retrieves the current status of the AppletLoader and is + * used by liveconnect when running in headless mode. + * + * This method will return the current progress of the AppletLoader + * as a value from 0-100. In the case of a fatal error it will + * return -1. If the certificate is refused it will return -2. + * + * When method returns 100 the AppletLoader will sleep until the + * method is called again. When called again it will switch to the + * LWJGL Applet. This is a useful trigger to start the LWJGL applet + * when needed. + */ + public int getStatus() { + if (fatalError) { + if (certificateRefused) return -2; + headlessMessage = (certificateRefused) ? certificateRefusedMessage : genericErrorMessage; + return -1; + } + + if (percentage == 100 && headlessWaiting) { + headlessWaiting = false; + } + + if (percentage == 95) { + percentage = 100; // ready to switch applet + } + + String[] message = {getDescriptionForState(), subtaskMessage}; + headlessMessage = message; + + return percentage; + } + + /** + * Retrieves the current message for the current status. + * Used by liveconnect when running in headless mode. + */ + public String[] getMessages() { + return headlessMessage; + } + + /** * Transfers the call of AppletResize from the stub to the lwjglApplet. */ public void appletResize(int width, int height) { @@ -471,7 +529,7 @@ og.drawString(errorMessage[i], messageX, messageY + i*fm.getHeight()); } } - } else { + } else if (!headless) { og.setColor(fgColor); painting = true; @@ -785,6 +843,13 @@ // set lwjgl properties setLWJGLProperties(); + // if headless mode then sleep, until told to continue + if (headless) { + while(headlessWaiting) { + Thread.sleep(100); + } + } + // make applet switch on the EDT as an AWT/Swing permission dialog could be called EventQueue.invokeAndWait(new Runnable() { public void run() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |