6

質問

私はJavaで書かれたアプリケーションを持っています。Linux ボックス スタンドアロンで実行するように設計されています。新しいFirefoxウィンドウを生成しようとしています。ただし、firefoxは開きません。シェルの終了コードは常に 1 です。この同じコードをgnome-terminalで実行すると、正常に開きます。

バックグラウンド

したがって、ここにその初期化プロセスがあります:

  1. Start X "Xorg :1 -br -terminate -dpms -quiet vt7"
  2. ウィンドウマネージャを起動 "metacity --display=:1 --replace"
  3. リソースの構成「xrdb -merge /etc/X11/Xresources」
  4. デーモンになり、制御端末から切断します

プログラムが実行されると、ユーザーがクリックできるボタンが表示され、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;
  }
}
4

5 に答える 5

9

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();
            }
        }
    }
于 2008-10-29T21:47:30.013 に答える
4

BrowserLauncherを使用します。

呼び出すのはとても簡単です。

new BrowserLauncher().openURLinBrowser("http://www.google.com");
于 2008-10-29T22:07:00.957 に答える
2

さまざまな回答とさまざまなコメント(質問者から)を読んだ後、これが私がすることです

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を起動します!!

于 2008-10-30T03:03:50.950 に答える
0

標準の出力/エラーストリームを読んで表示すると、Firefoxが出力する可能性のあるエラーメッセージをキャッチできるので、運が良いかもしれません。

于 2008-10-29T22:04:21.493 に答える
0
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());
}
于 2012-02-12T08:52:40.347 に答える