从Java程序打开浏览器窗口

我有一个用Java编写的应用程序。 它被devise为独立运行在一个Linux机器上。 我正试图产生一个新的Firefox窗口。 但是, Firefox永远不会打开。 它总是有一个shell退出代码1.我可以用gnome-terminal运行这个相同的代码,并打开罚款。

背景

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

  1. 启动X“Xorg:1 -br -terminate -dpms -quiet vt7”
  2. 启动窗口pipe理器“metacity –display =:1 – replace”
  3. configuration资源“xrdb -merge / etc / X11 / Xresources”
  4. 成为守护进程,并从控制terminal断开

一旦程序运行,用户可以点击一个button,产生一个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; } } 

Solutions Collecting From Web of "从Java程序打开浏览器窗口"

在阅读了各种答案和各种评论(来自提问者)之后,我会做些什么

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!

如果您可以缩小到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()); }