⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserlauncher.java

📁 一个简单好用的java语言实现的个人日志管理系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				try {					mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");					mrjOSTypeClass = Class.forName("com.apple.mrj.MRJOSType");					Field systemFolderField = mrjFileUtilsClass.getDeclaredField("kSystemFolderType");					kSystemFolderType = systemFolderField.get(null);					findFolder = mrjFileUtilsClass.getDeclaredMethod("findFolder", new Class[] { mrjOSTypeClass });					getFileCreator = mrjFileUtilsClass.getDeclaredMethod("getFileCreator", new Class[] { File.class });					getFileType = mrjFileUtilsClass.getDeclaredMethod("getFileType", new Class[] { File.class });				} catch (ClassNotFoundException cnfe) {					errorMessage = cnfe.getMessage();					return false;				} catch (NoSuchFieldException nsfe) {					errorMessage = nsfe.getMessage();					return false;				} catch (NoSuchMethodException nsme) {					errorMessage = nsme.getMessage();					return false;				} catch (SecurityException se) {					errorMessage = se.getMessage();					return false;				} catch (IllegalAccessException iae) {					errorMessage = iae.getMessage();					return false;				}				break;			case MRJ_3_0:			    try {					Class linker = Class.forName("com.apple.mrj.jdirect.Linker");					Constructor constructor = linker.getConstructor(new Class[]{ Class.class });					linkage = constructor.newInstance(new Object[] { BrowserLauncher.class });				} catch (ClassNotFoundException cnfe) {					errorMessage = cnfe.getMessage();					return false;				} catch (NoSuchMethodException nsme) {					errorMessage = nsme.getMessage();					return false;				} catch (InvocationTargetException ite) {					errorMessage = ite.getMessage();					return false;				} catch (InstantiationException ie) {					errorMessage = ie.getMessage();					return false;				} catch (IllegalAccessException iae) {					errorMessage = iae.getMessage();					return false;				}				break;			case MRJ_3_1:				try {					mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils");					openURL = mrjFileUtilsClass.getDeclaredMethod("openURL", new Class[] { String.class });				} catch (ClassNotFoundException cnfe) {					errorMessage = cnfe.getMessage();					return false;				} catch (NoSuchMethodException nsme) {					errorMessage = nsme.getMessage();					return false;				}				break;			default:			    break;		}		return true;	}	/**	 * Attempts to locate the default web browser on the local system.  Caches results so it	 * only locates the browser once for each use of this class per JVM instance.	 * @return The browser for the system.  Note that this may not be what you would consider	 *			to be a standard web browser; instead, it's the application that gets called to	 *			open the default web browser.  In some cases, this will be a non-String object	 *			that provides the means of calling the default browser.	 */	private static Object locateBrowser() {		if (browser != null) {			return browser;		}		switch (jvm) {			case MRJ_2_0:				try {					Integer finderCreatorCode = (Integer) makeOSType.invoke(null, new Object[] { FINDER_CREATOR });					Object aeTarget = aeTargetConstructor.newInstance(new Object[] { finderCreatorCode });					Integer gurlType = (Integer) makeOSType.invoke(null, new Object[] { GURL_EVENT });					Object appleEvent = appleEventConstructor.newInstance(new Object[] { gurlType, gurlType, aeTarget, kAutoGenerateReturnID, kAnyTransactionID });					// Don't set browser = appleEvent because then the next time we call					// locateBrowser(), we'll get the same AppleEvent, to which we'll already have					// added the relevant parameter. Instead, regenerate the AppleEvent every time.					// There's probably a way to do this better; if any has any ideas, please let					// me know.					return appleEvent;				} catch (IllegalAccessException iae) {					browser = null;					errorMessage = iae.getMessage();					return browser;				} catch (InstantiationException ie) {					browser = null;					errorMessage = ie.getMessage();					return browser;				} catch (InvocationTargetException ite) {					browser = null;					errorMessage = ite.getMessage();					return browser;				}			case MRJ_2_1:				File systemFolder;				try {					systemFolder = (File) findFolder.invoke(null, new Object[] { kSystemFolderType });				} catch (IllegalArgumentException iare) {					browser = null;					errorMessage = iare.getMessage();					return browser;				} catch (IllegalAccessException iae) {					browser = null;					errorMessage = iae.getMessage();					return browser;				} catch (InvocationTargetException ite) {					browser = null;					errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();					return browser;				}				String[] systemFolderFiles = systemFolder.list();				// Avoid a FilenameFilter because that can't be stopped mid-list				for(int i = 0; i < systemFolderFiles.length; i++) {					try {						File file = new File(systemFolder, systemFolderFiles[i]);						if (!file.isFile()) {							continue;						}						// We're looking for a file with a creator code of 'MACS' and						// a type of 'FNDR'.  Only requiring the type results in non-Finder						// applications being picked up on certain Mac OS 9 systems,						// especially German ones, and sending a GURL event to those						// applications results in a logout under Multiple Users.						Object fileType = getFileType.invoke(null, new Object[] { file });						if (FINDER_TYPE.equals(fileType.toString())) {							Object fileCreator = getFileCreator.invoke(null, new Object[] { file });							if (FINDER_CREATOR.equals(fileCreator.toString())) {								browser = file.toString();	// Actually the Finder, but that's OK								return browser;							}						}					} catch (IllegalArgumentException iare) {						browser = browser;						errorMessage = iare.getMessage();						return null;					} catch (IllegalAccessException iae) {						browser = null;						errorMessage = iae.getMessage();						return browser;					} catch (InvocationTargetException ite) {						browser = null;						errorMessage = ite.getTargetException().getClass() + ": " + ite.getTargetException().getMessage();						return browser;					}				}				browser = null;				break;			case MRJ_3_0:			case MRJ_3_1:				browser = "";	// Return something non-null				break;			case WINDOWS_NT:				browser = "cmd.exe";				break;			case WINDOWS_9x:				browser = "command.com";				break;			case OTHER:			default:				browser = "netscape";				break;		}		return browser;	}	/**	 * Attempts to open the default web browser to the given URL.	 * @param url The URL to open	 * @throws IOException If the web browser could not be located or does not run	 */	public static void openURL(String url) throws IOException {		if (!loadedWithoutErrors) {			throw new IOException("Exception in finding browser: " + errorMessage);		}		Object browser = locateBrowser();		if (browser == null) {			throw new IOException("Unable to locate browser: " + errorMessage);		}				switch (jvm) {			case MRJ_2_0:				Object aeDesc = null;				try {					aeDesc = aeDescConstructor.newInstance(new Object[] { url });					putParameter.invoke(browser, new Object[] { keyDirectObject, aeDesc });					sendNoReply.invoke(browser, new Object[] { });				} catch (InvocationTargetException ite) {					throw new IOException("InvocationTargetException while creating AEDesc: " + ite.getMessage());				} catch (IllegalAccessException iae) {					throw new IOException("IllegalAccessException while building AppleEvent: " + iae.getMessage());				} catch (InstantiationException ie) {					throw new IOException("InstantiationException while creating AEDesc: " + ie.getMessage());				} finally {					aeDesc = null;	// Encourage it to get disposed if it was created					browser = null;	// Ditto				}				break;			case MRJ_2_1:				Runtime.getRuntime().exec(new String[] { (String) browser, url } );				break;			case MRJ_3_0:				int[] instance = new int[1];				int result = ICStart(instance, 0);				if (result == 0) {					int[] selectionStart = new int[] { 0 };					byte[] urlBytes = url.getBytes();					int[] selectionEnd = new int[] { urlBytes.length };					result = ICLaunchURL(instance[0], new byte[] { 0 }, urlBytes,											urlBytes.length, selectionStart,											selectionEnd);					if (result == 0) {						// Ignore the return value; the URL was launched successfully						// regardless of what happens here.						ICStop(instance);					} else {						throw new IOException("Unable to launch URL: " + result);					}				} else {					throw new IOException("Unable to create an Internet Config instance: " + result);				}				break;			case MRJ_3_1:				try {					openURL.invoke(null, new Object[] { url });				} catch (InvocationTargetException ite) {					throw new IOException("InvocationTargetException while calling openURL: " + ite.getMessage());				} catch (IllegalAccessException iae) {					throw new IOException("IllegalAccessException while calling openURL: " + iae.getMessage());				}				break;		    case WINDOWS_NT:		    case WINDOWS_9x:		    	// Add quotes around the URL to allow ampersands and other special		    	// characters to work.				Process process = Runtime.getRuntime().exec(new String[] { (String) browser,																FIRST_WINDOWS_PARAMETER,																SECOND_WINDOWS_PARAMETER,																THIRD_WINDOWS_PARAMETER,																'"' + url + '"' });				// This avoids a memory leak on some versions of Java on Windows.				// That's hinted at in <http://developer.java.sun.com/developer/qow/archive/68/>.				try {					process.waitFor();					process.exitValue();				} catch (InterruptedException ie) {					throw new IOException("InterruptedException while launching browser: " + ie.getMessage());				}				break;			case OTHER:				// Assume that we're on Unix and that Netscape is installed								// First, attempt to open the URL in a currently running session of Netscape				process = Runtime.getRuntime().exec(new String[] { (String) browser,													NETSCAPE_REMOTE_PARAMETER,													NETSCAPE_OPEN_PARAMETER_START +													url +													NETSCAPE_OPEN_PARAMETER_END });				try {					int exitCode = process.waitFor();					if (exitCode != 0) {	// if Netscape was not open						Runtime.getRuntime().exec(new String[] { (String) browser, url });					}				} catch (InterruptedException ie) {					throw new IOException("InterruptedException while launching browser: " + ie.getMessage());				}				break;			default:				// This should never occur, but if it does, we'll try the simplest thing possible				Runtime.getRuntime().exec(new String[] { (String) browser, url });				break;		}	}	/**	 * Methods required for Mac OS X.  The presence of native methods does not cause	 * any problems on other platforms.	 */	private native static int ICStart(int[] instance, int signature);	private native static int ICStop(int[] instance);	private native static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len,											int[] selectionStart, int[] selectionEnd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -