/** Available and recommended on Mac OS X >= 10.6 Update 4 */ public static final int JAWT_MACOSX_USE_CALAYER = 0x80000000; public static final VersionNumber JAWT_MacOSXCALayerMinVersion = new VersionNumber(10,6,4); private static volatile JAWT jawt = null; private static int jawt_version_flags = 0; private int jawt_version_cached = 0; public final int getVersionCached() { return jawt_version_cached; } public static void setJAWTVersionFlags(int versionFlags) { synchronized (JAWT.class) { if (jawt != null) { throw new RuntimeException("JAWT already instantiated"); } jawt_version_flags = versionFlags; } } public static boolean isJAWTInstantiated() { synchronized (JAWT.class) { return jawt != null; } } /** Helper routine for all users to call to access the JAWT. */ public static JAWT getJAWT() { if (jawt == null) { synchronized (JAWT.class) { if (jawt == null) { JAWTUtil.initSingleton(); // Workaround for 4845371. // Make sure the first reference to the JNI GetDirectBufferAddress is done // from a privileged context so the VM's internal class lookups will succeed. AccessController.doPrivileged(new PrivilegedAction() { public Object run() { JAWT j = JAWT.create(); if( 0 != ( jawt_version_flags & JAWT_MACOSX_USE_CALAYER ) ) { j.setVersion(jawt_version_flags); if (JAWTFactory.JAWT_GetAWT(j)) { jawt = j; jawt.jawt_version_cached = jawt.getVersion(); return null; } jawt_version_flags &= ~JAWT_MACOSX_USE_CALAYER; System.err.println("MacOSX "+Platform.OS_VERSION_NUMBER+" >= "+JAWT_MacOSXCALayerMinVersion+": Failed to use JAWT_MACOSX_USE_CALAYER"); } j.setVersion(jawt_version_flags); if (!JAWTFactory.JAWT_GetAWT(j)) { throw new RuntimeException("Unable to initialize JAWT: 0x"+Integer.toHexString(jawt_version_flags)); } jawt = j; jawt.jawt_version_cached = jawt.getVersion(); return null; } }); } } } return jawt; }