--- old/modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativePlatformFactory.java 2014-01-21 12:06:05.012163784 -0500 +++ new/modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativePlatformFactory.java 2014-01-21 12:06:04.816163791 -0500 @@ -25,53 +25,78 @@ package com.sun.glass.ui.monocle; +import com.sun.glass.ui.monocle.linux.LinuxSystem; + import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Locale; public abstract class NativePlatformFactory { + private static String platformName=""; + private static String factoryClassName=""; + private static long nativeDisplayType = -1L; protected abstract boolean matches(); protected abstract NativePlatform createNativePlatform(); private static NativePlatform platform; - public static synchronized NativePlatform getNativePlatform() { - if (platform == null) { - String platformFactoryProperty = - AccessController.doPrivileged(new PrivilegedAction() { + private static boolean initialized = false; + + private static void determineNativePlatform(){ + String platformFactoryProperty = AccessController.doPrivileged(new PrivilegedAction() { @Override public String run() { - return System.getProperty("monocle.platform", - "MX6,OMAP,Linux,Headless"); + return System.getProperty("monocle.platform", "MX6,OMAP,Linux,Headless"); } - }); - String[] platformFactories = platformFactoryProperty.split(","); - for (int i = 0; i < platformFactories.length; i++) { - String factoryName = platformFactories[i].trim(); - String factoryClassName; - if (factoryName.contains(".")) { - factoryClassName = factoryName; - } else { - factoryClassName = "com.sun.glass.ui.monocle." - + factoryName.toLowerCase(Locale.ROOT) - + "." + factoryName + "PlatformFactory"; + } ); + + String[] platformFactories = platformFactoryProperty.split(","); + for (int i = 0; i < platformFactories.length; i++) { + String factoryName = platformFactories[i].trim(); + if (factoryName.contains(".")) { + factoryClassName = factoryName; + platformName = factoryClassName.substring(factoryClassName.lastIndexOf(".", 0)); + } else { + platformName = factoryName.toLowerCase(Locale.ROOT); + factoryClassName = "com.sun.glass.ui.monocle." + platformName + "." + factoryName + "PlatformFactory"; + } + try { + NativePlatformFactory npf = (NativePlatformFactory) Class.forName(factoryClassName).newInstance(); + if (npf.matches()) { + initialized = true; + return; } - try { - NativePlatformFactory npf = (NativePlatformFactory) - Class.forName(factoryClassName) - .newInstance(); - if (npf.matches()) { - platform = npf.createNativePlatform(); - return platform; - } - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + initialized = true; + } + + public static synchronized String getNativePlatformName() { + if (!initialized) { + determineNativePlatform(); + } + return platformName; + } + + public static synchronized NativePlatform getNativePlatform() { + if (!initialized) { + determineNativePlatform(); + } + if (platform == null) { + try { + NativePlatformFactory npf = (NativePlatformFactory) Class.forName(factoryClassName).newInstance(); + if (npf.matches()) { + platform = npf.createNativePlatform(); + return platform; } + } catch (Exception e) { + e.printStackTrace(); } - throw new UnsupportedOperationException( - "Cannot load a native platform from: '" - + platformFactoryProperty + "'"); + + throw new UnsupportedOperationException("Cannot load a native platform: '" + platformName + "'"); } return platform; }