diff --git a/engine/src/desktop/com/jme3/system/JmeSystem.java b/engine/src/desktop/com/jme3/system/JmeSystem.java index 76853faa8..6218e258a 100644 --- a/engine/src/desktop/com/jme3/system/JmeSystem.java +++ b/engine/src/desktop/com/jme3/system/JmeSystem.java @@ -29,22 +29,19 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package com.jme3.system; import com.jme3.app.SettingsDialog; import com.jme3.app.SettingsDialog.SelectionListener; import com.jme3.asset.AssetManager; +import com.jme3.asset.AssetNotFoundException; import com.jme3.asset.DesktopAssetManager; import com.jme3.audio.AudioRenderer; -import com.jme3.util.JmeFormatter; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.ConsoleHandler; -import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.SwingUtilities; @@ -57,54 +54,44 @@ public class JmeSystem { * Microsoft Windows 32 bit */ Windows32, - /** * Microsoft Windows 64 bit */ Windows64, - /** * Linux 32 bit */ Linux32, - - /** * Linux 64 bit */ Linux64, - /** * Apple Mac OS X 32 bit */ MacOSX32, - /** * Apple Mac OS X 64 bit */ MacOSX64, - /** * Apple Mac OS X 32 bit PowerPC */ MacOSX_PPC32, - /** * Apple Mac OS X 64 bit PowerPC */ MacOSX_PPC64, } - private static final Logger logger = Logger.getLogger(JmeSystem.class.getName()); - private static boolean initialized = false; private static boolean lowPermissions = false; - - public static boolean trackDirectMemory(){ + + public static boolean trackDirectMemory() { return false; } - public static void setLowPermissions(boolean lowPerm){ + public static void setLowPermissions(boolean lowPerm) { lowPermissions = lowPerm; } @@ -112,30 +99,36 @@ public class JmeSystem { return lowPermissions; } - public static AssetManager newAssetManager(URL configFile){ + public static AssetManager newAssetManager(URL configFile) { return new DesktopAssetManager(configFile); } - - public static AssetManager newAssetManager(){ + + public static AssetManager newAssetManager() { return new DesktopAssetManager(null); } - public static boolean showSettingsDialog(AppSettings sourceSettings, final boolean loadFromRegistry){ - if (SwingUtilities.isEventDispatchThread()) + public static boolean showSettingsDialog(AppSettings sourceSettings, final boolean loadFromRegistry) { + if (SwingUtilities.isEventDispatchThread()) { throw new IllegalStateException("Cannot run from EDT"); + } + - final AppSettings settings = new AppSettings(false); settings.copyFrom(sourceSettings); - final URL iconUrl = JmeSystem.class.getResource(sourceSettings.getSettingsDialogImage()); + String iconPath = sourceSettings.getSettingsDialogImage(); + final URL iconUrl = JmeSystem.class.getResource(iconPath.startsWith("/") ? iconPath : "/" + iconPath); + if (iconUrl == null) { + throw new AssetNotFoundException(sourceSettings.getSettingsDialogImage()); + } final AtomicBoolean done = new AtomicBoolean(); final AtomicInteger result = new AtomicInteger(); final Object lock = new Object(); - final SelectionListener selectionListener = new SelectionListener(){ - public void onSelection(int selection){ - synchronized (lock){ + final SelectionListener selectionListener = new SelectionListener() { + + public void onSelection(int selection) { + synchronized (lock) { done.set(true); result.set(selection); lock.notifyAll(); @@ -143,21 +136,23 @@ public class JmeSystem { } }; SwingUtilities.invokeLater(new Runnable() { + public void run() { synchronized (lock) { - SettingsDialog dialog = new SettingsDialog(settings, iconUrl,loadFromRegistry); + SettingsDialog dialog = new SettingsDialog(settings, iconUrl, loadFromRegistry); dialog.setSelectionListener(selectionListener); dialog.showDialog(); } } }); - - synchronized (lock){ - while (!done.get()) + + synchronized (lock) { + while (!done.get()) { try { lock.wait(); } catch (InterruptedException ex) { } + } } sourceSettings.copyFrom(settings); @@ -165,48 +160,49 @@ public class JmeSystem { return result.get() == SettingsDialog.APPROVE_SELECTION; } - private static boolean is64Bit(String arch){ - if (arch.equals("x86")) + private static boolean is64Bit(String arch) { + if (arch.equals("x86")) { return false; - else if (arch.equals("amd64")) + } else if (arch.equals("amd64")) { return true; - else if (arch.equals("x86_64")) + } else if (arch.equals("x86_64")) { return true; - else if (arch.equals("ppc") || arch.equals("PowerPC")) + } else if (arch.equals("ppc") || arch.equals("PowerPC")) { return false; - else if (arch.equals("ppc64")) + } else if (arch.equals("ppc64")) { return true; - else if (arch.equals("i386") || arch.equals("i686")) + } else if (arch.equals("i386") || arch.equals("i686")) { return false; - else if (arch.equals("universal")) + } else if (arch.equals("universal")) { return false; - else - throw new UnsupportedOperationException("Unsupported architecture: "+arch); + } else { + throw new UnsupportedOperationException("Unsupported architecture: " + arch); + } } - public static Platform getPlatform(){ + public static Platform getPlatform() { String os = System.getProperty("os.name").toLowerCase(); String arch = System.getProperty("os.arch").toLowerCase(); boolean is64 = is64Bit(arch); - if (os.contains("windows")){ + if (os.contains("windows")) { return is64 ? Platform.Windows64 : Platform.Windows32; - }else if (os.contains("linux") || os.contains("freebsd") || os.contains("sunos")){ + } else if (os.contains("linux") || os.contains("freebsd") || os.contains("sunos")) { return is64 ? Platform.Linux64 : Platform.Linux32; - }else if (os.contains("mac os x") || os.contains("darwin")){ - if (arch.startsWith("ppc")){ + } else if (os.contains("mac os x") || os.contains("darwin")) { + if (arch.startsWith("ppc")) { return is64 ? Platform.MacOSX_PPC64 : Platform.MacOSX_PPC32; - }else{ + } else { return is64 ? Platform.MacOSX64 : Platform.MacOSX32; } - }else{ - throw new UnsupportedOperationException("The specified platform: "+os+" is not supported."); + } else { + throw new UnsupportedOperationException("The specified platform: " + os + " is not supported."); } } - private static JmeContext newContextLwjgl(AppSettings settings, JmeContext.Type type){ - try{ + private static JmeContext newContextLwjgl(AppSettings settings, JmeContext.Type type) { + try { Class ctxClazz = null; - switch (type){ + switch (type) { case Canvas: ctxClazz = (Class) Class.forName("com.jme3.system.lwjgl.LwjglCanvas"); break; @@ -221,22 +217,22 @@ public class JmeSystem { } return ctxClazz.newInstance(); - }catch (InstantiationException ex){ + } catch (InstantiationException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (IllegalAccessException ex){ + } catch (IllegalAccessException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (ClassNotFoundException ex){ - logger.log(Level.SEVERE, "CRITICAL ERROR: Context class is missing!\n" + - "Make sure jme3_lwjgl-ogl is on the classpath.", ex); + } catch (ClassNotFoundException ex) { + logger.log(Level.SEVERE, "CRITICAL ERROR: Context class is missing!\n" + + "Make sure jme3_lwjgl-ogl is on the classpath.", ex); } - + return null; } - private static JmeContext newContextJogl(AppSettings settings, JmeContext.Type type){ - try{ + private static JmeContext newContextJogl(AppSettings settings, JmeContext.Type type) { + try { Class ctxClazz = null; - switch (type){ + switch (type) { case Display: ctxClazz = (Class) Class.forName("com.jme3.system.jogl.JoglDisplay"); break; @@ -248,30 +244,30 @@ public class JmeSystem { } return ctxClazz.newInstance(); - }catch (InstantiationException ex){ + } catch (InstantiationException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (IllegalAccessException ex){ + } catch (IllegalAccessException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (ClassNotFoundException ex){ - logger.log(Level.SEVERE, "CRITICAL ERROR: Context class is missing!\n" + - "Make sure jme3_jogl is on the classpath.", ex); + } catch (ClassNotFoundException ex) { + logger.log(Level.SEVERE, "CRITICAL ERROR: Context class is missing!\n" + + "Make sure jme3_jogl is on the classpath.", ex); } return null; } - private static JmeContext newContextCustom(AppSettings settings, JmeContext.Type type){ - try{ + private static JmeContext newContextCustom(AppSettings settings, JmeContext.Type type) { + try { String className = settings.getRenderer().substring("CUSTOM".length()); Class ctxClazz = null; ctxClazz = (Class) Class.forName(className); return ctxClazz.newInstance(); - }catch (InstantiationException ex){ + } catch (InstantiationException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (IllegalAccessException ex){ + } catch (IllegalAccessException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (ClassNotFoundException ex){ + } catch (ClassNotFoundException ex) { logger.log(Level.SEVERE, "CRITICAL ERROR: Context class is missing!", ex); } @@ -282,84 +278,82 @@ public class JmeSystem { initialize(settings); JmeContext ctx; if (settings.getRenderer() == null - || settings.getRenderer().equals("NULL") - || contextType == JmeContext.Type.Headless){ + || settings.getRenderer().equals("NULL") + || contextType == JmeContext.Type.Headless) { ctx = new NullContext(); ctx.setSettings(settings); - }else if (settings.getRenderer().startsWith("LWJGL")){ + } else if (settings.getRenderer().startsWith("LWJGL")) { ctx = newContextLwjgl(settings, contextType); ctx.setSettings(settings); - }else if (settings.getRenderer().startsWith("JOGL")){ + } else if (settings.getRenderer().startsWith("JOGL")) { ctx = newContextJogl(settings, contextType); ctx.setSettings(settings); - }else if (settings.getRenderer().startsWith("CUSTOM")){ + } else if (settings.getRenderer().startsWith("CUSTOM")) { ctx = newContextCustom(settings, contextType); ctx.setSettings(settings); - }else{ + } else { throw new UnsupportedOperationException( - "Unrecognizable renderer specified: "+ - settings.getRenderer()); + "Unrecognizable renderer specified: " + + settings.getRenderer()); } return ctx; } - public static AudioRenderer newAudioRenderer(AppSettings settings){ + public static AudioRenderer newAudioRenderer(AppSettings settings) { initialize(settings); Class clazz = null; try { - if (settings.getAudioRenderer().startsWith("LWJGL")){ + if (settings.getAudioRenderer().startsWith("LWJGL")) { clazz = (Class) Class.forName("com.jme3.audio.lwjgl.LwjglAudioRenderer"); - }else if (settings.getAudioRenderer().startsWith("JOAL")){ + } else if (settings.getAudioRenderer().startsWith("JOAL")) { clazz = (Class) Class.forName("com.jme3.audio.joal.JoalAudioRenderer"); - }else{ + } else { throw new UnsupportedOperationException( - "Unrecognizable audio renderer specified: "+ - settings.getAudioRenderer()); + "Unrecognizable audio renderer specified: " + + settings.getAudioRenderer()); } AudioRenderer ar = clazz.newInstance(); return ar; - }catch (InstantiationException ex){ + } catch (InstantiationException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (IllegalAccessException ex){ + } catch (IllegalAccessException ex) { logger.log(Level.SEVERE, "Failed to create context", ex); - }catch (ClassNotFoundException ex){ - logger.log(Level.SEVERE, "CRITICAL ERROR: Audio implementation class is missing!\n" + - "Make sure jme3_lwjgl-oal or jm3_joal is on the classpath.", ex); + } catch (ClassNotFoundException ex) { + logger.log(Level.SEVERE, "CRITICAL ERROR: Audio implementation class is missing!\n" + + "Make sure jme3_lwjgl-oal or jm3_joal is on the classpath.", ex); } return null; } - public static void initialize(AppSettings settings){ - if (initialized) + public static void initialize(AppSettings settings) { + if (initialized) { return; - + } + initialized = true; try { - if (!lowPermissions){ + if (!lowPermissions) { // can only modify logging settings // if permissions are available - // JmeFormatter formatter = new JmeFormatter(); // Handler fileHandler = new FileHandler("jme.log"); // fileHandler.setFormatter(formatter); // Logger.getLogger("").addHandler(fileHandler); - // Handler consoleHandler = new ConsoleHandler(); // consoleHandler.setFormatter(formatter); - // Logger.getLogger("").removeHandler(Logger.getLogger("").getHandlers()[0]); // Logger.getLogger("").addHandler(consoleHandler); } // } catch (IOException ex){ // logger.log(Level.SEVERE, "I/O Error while creating log file", ex); - } catch (SecurityException ex){ + } catch (SecurityException ex) { logger.log(Level.SEVERE, "Security error in creating log file", ex); } logger.log(Level.INFO, "Running on {0}", getFullName()); - - if (!lowPermissions){ + + if (!lowPermissions) { try { Natives.extractNativeLibs(getPlatform(), settings); } catch (IOException ex) { @@ -368,15 +362,15 @@ public class JmeSystem { } } - public static String getFullName(){ + public static String getFullName() { return "jMonkey Engine 3 Alpha 0.6"; } - public static InputStream getResourceAsStream(String name){ + public static InputStream getResourceAsStream(String name) { return JmeSystem.class.getResourceAsStream(name); } - - public static URL getResource(String name){ + + public static URL getResource(String name) { return JmeSystem.class.getResource(name); } }