JavaでURLを開く

組込みのクラスを使う方法と、URLを扱うことのできる外部プロセス(コマンド)を起動する方法がある。

  • 組込みのクラスを使う

Java組込みのクラスを使うことでOSに依らずにURLを開くことができる(大抵はWebブラウザか、そのプラグインを使うことになる)

1. Java6から追加されたDeskTopクラスを用いる

Desktop desktop = Desktop.getDesktop();
desktop.browse(new URI("http://d.hatena.ne.jp/Kazzz/"));

2. Java Web StartのBasicServiceを使う(Java Web Startのコンテキストでのみ使用可能)

BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService"); 
bs.showDocument(new URL("http://d.hatena.ne.jp/Kazzz/")); 

3. Java AppletのAppletContextクラスを使う(Java Appletのコンテキストでのみ使用可能)

URL url = new URL("http://d.hatena.ne.jp/Kazzz/");
applet.getAppletContext().showDocument(url);

他にもあるかもしれないが、これ位で。

  • 外部プロセスを起動する方法

古のRuntimeクラスを使うにしろ、ProcessBuilderクラスを使うにしろ、Processクラスを扱うのは変わらない。組込みのクラスと違うのは、外部プロセスにOS独自のものを指定できることだ。例えばWindowsに限定して書くと、以下のコマンドを起動することによりURLを開くことができる。

1. シェルコマンドを使う

Runtime rt = Runtime.getRuntime();
rt.exec( "rundll32" + " url.dll,FileProtocolHandler http://d.hatena.ne.jp/Kazzz/");

2. startコマンドを使う

Runtime rt = Runtime.getRuntime();
rt.exec( "cmd /c start " + "http://d.hatena.ne.jp/Kazzz/");

OSのURLを開くためのコマンドを叩くことができれば良いので、他にも方法はあることだろう。

.NET C#にも当然外部プロセスを起動するクラスがありJava同様に使えるが、.NETの場合Javaには無いProcessStartInfoクラスによりプロセス起動時の振舞いを変えることができる。

ProcessStartInfo startInfo = new ProcessStartInfo("rundll32");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = " url.dll,FileProtocolHandler http://d.hatena.ne.jp/Kazzz/";
Process.Start(startInfo);

同等の機能はJavaのProcessクラスには無いのだが、同じことができないのだろうか。まあ、あくまでWindowsのプロセスの話なので、できないのだろうな。