Javaプログラムからブラウザウィンドウを開く
質問
質問
Javaで書かれたアプリケーションがあります。Linux ボックス スタンドアロンで実行するように設計されています。新しいものを生み出そうとしています ファイアフォックス 窓。しかし、 ファイアフォックス 決して開きません。シェル終了コードは常に 1 です。これと同じコードを実行できます gnome ターミナル そしてそれはうまく開きます。
背景
したがって、その初期化プロセスは次のとおりです。
- X を起動します。「Xorg :1 -br -terminate -dpms -quiet vt7」
- ウィンドウマネージャーを起動します。「metacity --display=:1 --replace」
- リソースの構成「xrdb -merge /etc/X11/Xresources」
- デーモンになり、制御端末から切断します
プログラムが実行されると、ユーザーがクリックできるボタンが表示され、Firefox ウィンドウが表示されます。これを行うための私のコードは次のとおりです。X がディスプレイ :1 で実行中であることを思い出してください。
コード
public boolean openBrowser()
{
try {
Process oProc = Runtime.getRuntime().exec( "/usr/bin/firefox --display=:1" );
int bExit = oProc.waitFor(); // This is always 1 for some reason
return true;
} catch ( Exception e ) {
oLogger.log( Level.WARNING, "Open Browser", e );
return false;
}
}
解決
さまざまな回答と(質問者からの)さまざまなコメントを読んだ後、私ならどうするか
1) この Java アプローチを試してくださいhttp://java.sun.com/j2se/1.5.0/docs/api/java/lang/ProcessBuilder.html
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory("myDir");
Process p = pb.start();
このクラスの詳細を参照してください。
http://java.sun.com/developer/JDCTechTips/2005/tt0727.html#2
http://www.javabeat.net/tips/8-using-the-new-process-builder-class.html
2) C/C++/ruby/python からこれ (Firefox の起動) を実行して、成功するかどうかを確認してください。
3) 他のすべてが失敗した場合は、シェル プログラムを起動すると、そのシェル プログラムは Firefox を起動します。
他のヒント
Java 6に絞り込むことができる場合は、デスクトップAPIを使用できます:
http://java.sun.com/developer/technicalArticles / J2SE / Desktop / javase6 / desktop_api /
次のようになります。
if (Desktop.isDesktopSupported()) {
Desktop desktop = Desktop.getDesktop();
if (desktop.isSupported(Desktop.Action.BROWSE)) {
try {
desktop.browse(new URI("http://localhost"));
}
catch(IOException ioe) {
ioe.printStackTrace();
}
catch(URISyntaxException use) {
use.printStackTrace();
}
}
}
BrowserLauncher を使用します。
呼び出すのはとても簡単です、ただ行くだけです
new BrowserLauncher().openURLinBrowser("http://www.google.com");
標準出力/エラーストリームを読み取って表示すると、firefoxが出力する可能性のあるエラーメッセージをキャッチできます。
try {
String url = "http://www.google.com";
java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));
} catch (java.io.IOException e) {
System.out.println(e.getMessage());
}