Java 應用程式常需開啟網頁連結,提供兩種跨平台解決方案:傳統 Runtime.exec 與現代 Desktop API (Java 6+)。
// 僅限 Windows,呼叫系統 DLL
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler https://www.example.com");
缺點:平台相依、無法處理複雜 URI、錯誤處理困難。
import java.awt.Desktop;
import java.net.URI;
public class BrowserLauncher {
public static void openURL(String url) {
// 1. 檢查平台支援
if (!Desktop.isDesktopSupported()) {
System.err.println("當前平台不支援 Desktop API");
return;
}
Desktop desktop = Desktop.getDesktop();
// 2. 檢查 BROWSE 動作支援
if (!desktop.isSupported(Desktop.Action.BROWSE)) {
System.err.println("當前環境不支援瀏覽操作");
return;
}
try {
// 3. 建立 URI (非 URL),開啟瀏覽器
URI uri = new URI(url);
desktop.browse(uri);
} catch (URISyntaxException e) {
System.err.println("無效的 URI 格式: " + url);
} catch (IOException e) {
System.err.println("無法啟動瀏覽器: " + e.getMessage());
} catch (NullPointerException e) {
System.err.println("URI 為空");
}
}
public static void main(String[] args) {
openURL("https://www.example.com");
}
}
| 特性 | Runtime.exec | Desktop API |
|---|---|---|
| 跨平台 | 否 (Windows only) | 是 (Windows/macOS/Linux) |
| 錯誤處理 | 困難 | 完整例外處理 |
| URI 支援 | 簡單字串 | 標準 URI 類別 |
| Java 版本 | 所有版本 | Java 6+ |
| 桌面整合 | 無 | 支援 EDIT/MAIL/OPEN 等動作 |
Desktop.browse() 接受 URI,非 URL,注意轉換isDesktopSupported() 與 isSupported(Action.BROWSE)IOException (無瀏覽器)、URISyntaxException (格式錯誤)、NullPointerException (空值)現代 Java 應用應標準採用 Desktop API,確保跨平台相容與健壯錯誤處理。