Runtime.exec()中的终端命令失败

时间:2015-08-04 16:04:01

标签: java linux

不确定这是否适用于Stackoverflow或超级用户,因为它几乎适用于...

我正在运行Lubuntu,我想创建一个类似Windows的开始菜单'搜索LXDE桌面菜单。与Windows一样,在找到项目后,我希望能够启动它。

LXDE菜单系统与.desktop文件一起使用,因此我的代码使用Runtime.exec()执行以下命令来启动程序:

gtk-launch <.desktop filename without extension>

99%的情况下运行良好。不幸的是,我无法弄清楚为什么其他1%拒绝发布。其中一个应用程序是TeamViewer。现在出现了一个奇怪的部分:当我在终端中运行命令gtk-launch teamviewer-teamviewer10时,它运行良好,但如果我通过Runtime.exec()运行相同的命令,它就不会启动,但它不会给我任何错误信息。

这是我的代码:

Process p = Runtime.getRuntime().exec(new String[] { "gtk-launch", "teamviewer-teamviewer10" });
p.waitFor();

我是否必须修改gtk-launch命令或我的代码有问题? (注意:几乎所有其他程序都可以正常启动。)

1 个答案:

答案 0 :(得分:0)

作为一种解决方法,我决定从.desktop文件中提取 Exec 命令,然后通过bash运行它。

String command = getExecCommandFromDesktopFile().replaceAll("\\\\ ", " ");
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", command });

这似乎在所有条件下都有效。我仍然没有弄清楚为什么gtk-launch不适用于所有情况,但对我来说,这种解决方法会很好。