|
|
|
在Java代码中调用默认浏览器打开某个网址(常常见于在应用程序中点击某个链接,然后转到某个网页):
在JDK 1.5及之前的版本中是这样实现的:
//JDK 1.5或之前版本
public static void openURL(String url) {
String osName = System.getProperty("os.name");
try {
if (osName.startsWith("Mac")) {//Mac OS
Class fileMgr = Class.forName("com.apple.eio.FileManager");
Method openURL = fileMgr.getDeclaredMethod("openURL",
new Class[]{String.class});
openURL.invoke(null, new Object[]{url});
} else if (osName.startsWith("Windows")) {//Windows
Runtime.getRuntime().exec(
"rundll32 url.dll,FileProtocolHandler " + url);
} else { //Unix or Linux
String[] browsers = {"firefox", "opera", "konqueror",
"epiphany", "mozilla", "netscape"};
String browser = null;
for (int count = 0; count < browsers.length && browser == null; count++) {
if (Runtime.getRuntime().exec(
new String[]{"which", browsers[count]}).waitFor() == 0) {
browser = browsers[count];
}
}
if (browser == null) {
throw new Exception("Could not find web browser");
} else {
Runtime.getRuntime().exec(new String[]{browser, url});
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
而在JDK 1.6中有一个Desktop API,使用的方法如:
Desktop desktop = Desktop.getDesktop();
if (Desktop.isDesktopSupported()
&& desktop.isSupported(Desktop.Action.BROWSE)) { //必须判断是否支持
URI uri = new URI(webSite);
desktop.browse(uri);
}
不过这个会出现如下异常,貌似是Java的bug。
Exception in thread "main" java.io.IOException: Failed to open http://baidu.com.cn. Error message: 系统找不到指定的文件。
其他用到Desktop API的场景如用默认程序打开和编辑文件、打开邮件编辑程序等等。
方法都很简单,如下:
Desktop desktop = Desktop.getDesktop();
if (Desktop.isDesktopSupported()
&& desktop.isSupported(Desktop.Action.BROWSE)) { //必须判断是否支持
desktop.open(File file); //使用默认程序打开文件,比如mp3用千千静听打开
desktop.edit(File file); //使用默认程序编辑文件
desktop.mail(); //打开发送邮件程序
desktop.mail(mailtoURI);//使用默认邮件程序发送邮件
}