从Java程序打开浏览器窗口

时间:2008-10-29 21:41:14

标签: java linux browser x11 daemon

问题

我有一个用Java编写的应用程序。它被设计为独立运行在Linux机器上。我正在尝试生成一个新的 firefox 窗口。但是, firefox 永远不会打开。它的shell退出代码始终为1.我可以使用 gnome-terminal 运行相同的代码,并且打开正常。

背景

所以,这是它的初始化过程:

  1. 开始X“Xorg:1 -br -terminate -dpms -quiet vt7”
  2. 启动窗口管理器“metacity --display =:1 --replace”
  3. 配置资源“xrdb -merge / etc / X11 / Xresources”
  4. 成为守护进程并断开与控制终端的连接
  5. 一旦程序运行起来,用户可以点击一个按钮来生成一个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;
      }
    }
    

5 个答案:

答案 0 :(得分: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();
            }
        }
    }

答案 1 :(得分:4)

使用BrowserLauncher

调用它非常简单,只需转到

new BrowserLauncher().openURLinBrowser("http://www.google.com");

答案 2 :(得分: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)如果所有其他方法都失败了,我会启动一个shell程序,那个shell程序会启动firefox !!

答案 3 :(得分:0)

如果您阅读并显示标准输出/错误流,您可能会有更好的运气,因此您可以捕获firefox可能打印的任何错误消息。

答案 4 :(得分: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());
}