gpt4 book ai didi

java - Linux 中的运行时执行问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:36 25 4
gpt4 key购买 nike

在我正在编写的应用程序中,我正在使用 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(); 代替。感谢大家的帮助!

最佳答案

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

关于java - Linux 中的运行时执行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com