Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Linux中的运行时执行问题_Java_Linux_Terminal_Runtime.exec - Fatal编程技术网

Java Linux中的运行时执行问题

Java Linux中的运行时执行问题,java,linux,terminal,runtime.exec,Java,Linux,Terminal,Runtime.exec,在我正在编写的应用程序中,我正在使用Runtime.exec(…)启动另一个应用程序(可运行的JAR)。所有东西都在Windows中成功启动,但Linux(特别是在Ubuntu中安装的某些CentOS-works)给我带来了一些问题。出于某种原因,辅助应用程序成功启动的唯一方法是通过终端执行第一个应用程序。所有行为都按预期工作。但是,如果我通过双击第一个应用程序的图标(没有打开终端)来启动第一个应用程序,那么启动第二个应用程序的按钮似乎没有任何作用。我没有得到异常或错误输出——只是我的进度条上的

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

我已经看到了关于exec方法()缺陷的常见链接文章,但是我在那里发现的任何东西都无法解决这个问题。事实上,我正在读取第二个进程的输出和错误流,因为当它成功运行时(通过终端命令启动第一个应用程序后),我看到了所有的输出。由于不太了解Linux的深层工作原理,我认为这听起来可能是输出流的权限问题或其他问题,但我不确定

如果有助于诊断问题,我将使用以下命令:
rt.exec(新字符串[]{“\bin\bash”,“-c”,“java-jar myjarfile.jar myArg1 myArg2…”)由于这是可行的(取决于应用程序是如何启动的),我不太担心这段代码有什么问题

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

编辑:解决方案是将目录修复到我试图运行的JAR。通过GUI启动时,
user.dir
指向包含我的应用程序的文件夹的父目录。因为我使用的是EclipseRCP,所以我的解决方案是使用
String currDirPath=Platform.getInstallLocation().getURL().toString()取而代之。谢谢大家的帮助

而不是

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


由于您只是使用jar文件名myjarfile.jar,而不是它的完整路径,这取决于当前的工作目录,jar可能会被找到,也可能不会被找到。尝试更改exec命令以使用jar的完整路径。您可以通过使用rt.exec()将“pwd”的输出写入文本文件来对此进行调试。

stdout/stderr流可能仍然存在问题。尝试使用
popen
而不是
exec
并捕获流程的输出。为什么不尝试使用ProcessBuilder.start()而不是Runtime.exec()?前者总是可取的。谢谢,伙计们。我将尝试并更新您的建议。谢谢您的输入。我会调试它以确保,但我不认为这是我的问题。在发布代码示例时,我遗漏了使用“String jarLoc=System.getProperty(“user.dir”)+”/myfolder/myjarfile.jar”;”根据工作目录构建jar的绝对路径。当前工作目录(“user.dir”)可能不是单击图标启动程序时您所认为的。Rajesh和Jonathan-非常有用!我意识到当通过GUI运行时,
user.dir
指向包含文件夹的父目录,而不是文件夹本身。解决了这个问题。
rt.exec(new String[]{"\bin\bash", "-c", "/***path to java***/java -jar myjarfile.jar myArg1 myArg2 ..."});