Linux中的运行时exec问题

时间:2012-07-25 11:44:24

标签: java linux terminal runtime.exec

在我正在编写的应用程序中,我正在使用Runtime.exec(...)启动另一个应用程序(可运行的JAR)。一切都在Windows中成功启动,但Linux(特别是CentOS的某些安装 - 在Ubuntu中运行)给了我一些问题。由于某种原因,辅助应用程序成功启动的唯一方法是我通过终端执行第一个。所有行为都按预期工作。但是,如果我通过双击其图标启动第一个应用程序(没有打开终端),启动第二个应用程序的按钮似乎什么都不做。我没有异常或错误输出 - 只是我的进度条的闪光说它正在启动,然后什么也没有。我可以通过jconsole确认第二个应用程序的进程从未启动过。

我已经看到了关于exec方法(http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)陷阱的常见链接文章,但是无法用我在那里找到的任何东西来解决这个问题。我实际上正在读取第二个进程的输出和错误流,因为我在成功运行时看到所有输出(在通过终端命令启动第一个应用程序之后)。不太了解Linux的更深层次的工作,我认为这听起来可能是输出流或其他东西的权限问题,但我不确定。

如果它有助于诊断问题,我使用的命令: rt.exec(new String[]{"\bin\bash", "-c", "java -jar myjarfile.jar myArg1 myArg2 ..."});由于这有效(取决于应用程序的启动方式),我不太担心这段代码有什么问题......

有人有什么建议吗?提前谢谢!

编辑:解决方案是将目录修复到我试图运行的JAR。通过GUI启动时,user.dir指向包含我的应用程序的文件夹的父目录。由于我使用的是Eclipse RCP,我的解决方案就是使用 而是String currDirPath = Platform.getInstallLocation().getURL().toString();。感谢大家的帮助!

2 个答案:

答案 0 :(得分:2)

由于您只是使用jar文件名 - myjarfile.jar - 而不是它的完整路径,根据当前的工作目录,可能会找到也可能找不到jar。尝试更改exec命令以使用jar的完整路径。您可以使用rt.exec()将'pwd'的输出写入文本文件来调试它。

答案 1 :(得分:0)

而不是

 rt.exec(new String[]{"\bin\bash", "-c", "java -jar myjarfile.jar myArg1 myArg2 ..."});

使用

rt.exec(new String[]{"\bin\bash", "-c", "/***path to java***/java -jar myjarfile.jar myArg1 myArg2 ..."});