方法一:用於windows
try {
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url);
} catch (IOException e1) {
e1.printStackTrace();
}
方法二:通用,但會可能會拋出java.net.URISyntaxException異常。
try {
// 創建一個URI實例,注意不是URL url格式問題可能會有異常這里
java.net.URI uri = java.net.URI.create(url);
// 獲取當前系統桌面擴展
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
// 判斷系統桌面是否支持要執行的功能
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
// 獲取系統默認瀏覽器打開鏈接
dp.browse(uri);
}
} catch (java.lang.NullPointerException e) {
// 此為uri為空時拋出異常
} catch (Exception e) {
e.printStackTrace();
// 此為無法獲取系統默認瀏覽器
}
下邊這個方法比較保險:
String url = "https://127.0.0.1:8834";
if (!url.startsWith("http")) {
url = "http://" + url;
}
try {
// 創建一個URI實例,注意不是URL
java.net.URI uri = java.net.URI.create(url);
// 獲取當前系統桌面擴展
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
// 判斷系統桌面是否支持要執行的功能
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
// 獲取系統默認瀏覽器打開鏈接
dp.browse(uri);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
try {
Class<URI> clazz = URI.class;
Field path = clazz.getDeclaredField("path");
Field schemeSpecificPart = clazz.getDeclaredField("schemeSpecificPart");
Field string = clazz.getDeclaredField("string");
path.setAccessible(true);
schemeSpecificPart.setAccessible(true);
string.setAccessible(true);
int i = url.indexOf("//");
String strSchemeSpecificPart = url.substring(i);
String s = strSchemeSpecificPart.substring(2);
int j = s.indexOf("/");
String strpath = s.substring(j);
String scheme = url.substring(0, i + 2);
String host = s.substring(0, j);
host = host.trim();
URI uri = URI.create(scheme + host);
path.set(uri, strpath);
schemeSpecificPart.set(uri, strSchemeSpecificPart);
string.set(uri, url);
java.awt.Desktop dp = java.awt.Desktop.getDesktop();
// 判斷系統桌面是否支持要執行的功能
if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {
// 獲取系統默認瀏覽器打開鏈接
dp.browse(uri);
}
} catch (Exception ee) {
}
} catch (java.lang.NullPointerException e) {
// 此為uri為空時拋出異常
} catch (java.io.IOException e) {
// 此為無法獲取系統默認瀏覽器
}
