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のプロセスの話なので、できないのだろうな。