package org.limewire.ui.swing; import java.awt.Frame; import java.awt.Image; import java.awt.Rectangle; import java.awt.SplashScreen; import java.awt.Toolkit; import java.lang.reflect.Method; import java.net.URL; import java.util.Locale; /** The entry point into the program using the real core. */ public class Main { private static long startTime; public static void main(String[] args) { startTime = System.currentTimeMillis(); try { if (isMacOSX()) { // Register GURL to receive AppleEvents, such as magnet links. // Use reflection to not slow down non-OSX systems. // "GURLHandler.getInstance().register();" Class<?> clazz = Class.forName("org.limewire.ui.swing.GURLHandler"); Method getInstance = clazz.getMethod("getInstance", new Class[0]); Object gurl = getInstance.invoke(null, new Object[0]); Method register = gurl.getClass().getMethod("register", new Class[0]); register.invoke(gurl, new Object[0]); } SplashScreen splashScreen = SplashScreen.getSplashScreen(); Frame splash = null; Image splashImage = null; // begin with null, assuming we can get it from SplashScreen // show initial splash screen only if there are no arguments if (args == null || args.length == 0) { Rectangle bounds; // If the splash screen existed & was visible, // then we want to take the image of the splash screen // and the bounds it was displayed at, so that // when we convert to an AWT image, the same image // is shown at the same place. if(splashScreen != null && splashScreen.isVisible()) { bounds = splashScreen.getBounds(); splashImage = Toolkit.getDefaultToolkit().createImage(splashScreen.getImageURL()); } else { // If no splash was already showing, then there's no pre-existing bounds // and we need to find our own image. bounds = null; splashImage = getSplashImage(); } // If we've discovered an image to show a splash, then show the // AWT splash. Note that if there was a pre-existing splash showing // via SplashScreen, the showing of an AWT frame will automatically // close & hide that splash. if(splashImage != null) { splash = AWTSplashWindow.splash(splashImage, bounds); } else if (splashScreen != null && splashScreen.isVisible()) { // If we couldn't find an image to show via AWT, then just close // the existing splash and be done with it. splashScreen.close(); } } else { // Hide the built-in splash if it was shown, since we don't want a splash // right now.. if(splashScreen != null && splashScreen.isVisible()) { splashScreen.close(); } } // If we couldn't find a splashImage by this point, just try to get it. // This is because the GuiLoader/Initializer code requires an Image, // even if there's no AWT splash frame for displaying it. if(splashImage == null) { splashImage = getSplashImage(); } // load the GUI through reflection so that we don't reference classes here, // which would slow the speed of class-loading, causing the splash to be // displayed later. Class<?> loadClass = Class.forName("org.limewire.ui.swing.GuiLoader"); Object loadInstance = loadClass.newInstance(); Method loadMethod = loadClass.getMethod("load", new Class[] { String[].class, Frame.class, Image.class } ); loadMethod.invoke(loadInstance, args, splash, splashImage); } catch(Throwable t) { t.printStackTrace(); System.exit(1); } } /** * Gets the image to be used as the splash. */ private static Image getSplashImage() { URL imageURL = ClassLoader.getSystemResource("org/limewire/ui/swing/mainframe/resources/splash.png"); if (imageURL != null) { return Toolkit.getDefaultToolkit().createImage(imageURL); } else { return null; } } /** Determines if this is running on OS X. */ private static boolean isMacOSX() { return System.getProperty("os.name", "").toLowerCase(Locale.US).startsWith("mac os x"); } public static long getStartTime() { return startTime; } }