Rya*_*ers 5 java browser linux x11 daemon
题
我有一个用Java编写的应用程序.它被设计为独立运行在Linux机器上.我正在尝试生成一个新的firefox窗口.但是,Firefox从未打开过.它总是有一个shell退出代码1.我可以使用gnome-terminal运行相同的代码,它打开正常.
背景
所以,这是它的初始化过程:
一旦程序运行起来,用户可以点击一个按钮来生成一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您可以将其缩小到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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在阅读了各种答案和各种评论(来自提问者)之后,这就是我要做的
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();
Run Code Online (Sandbox Code Playgroud)
查看有关此类的更多信息:
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!
| 归档时间: |
|
| 查看次数: |
14935 次 |
| 最近记录: |