Java 终端命令在运行时失败。exec()

Java 终端命令在运行时失败。exec(),java,linux,Java,Linux,不确定这是否最适合Stackoverflow或Superuser,因为它几乎适用于这两者 我正在运行Lubuntu,我想为LXDE桌面菜单创建一个类似Windows的“开始菜单”搜索。与Windows一样,在找到项目后,我希望能够启动它 LXDE菜单系统使用.desktop文件,因此我的代码使用Runtime.exec()执行以下命令来启动程序: gtk-launch <.desktop filename without extension> 我是否必须修改gtk launch命令

不确定这是否最适合Stackoverflow或Superuser,因为它几乎适用于这两者

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

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

gtk-launch <.desktop filename without extension>

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

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

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

这似乎在所有条件下都有效。我还没有弄明白为什么gtk launch不能适用于所有情况,但对我来说,这个解决方法很好。

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

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

这似乎在所有条件下都有效。我还没有弄明白为什么
gtk launch
不适用于所有情况,但对我来说,这种解决方法可以很好地解决问题。

您是否检查过那些不启动的程序是否需要来自环境的任何东西,例如显示器等。,当您通过终端启动时,哪些信息可能会传递给他们,但在通过Java启动时可能不会传递给他们?这听起来很有道理。。。我怎么检查这个?是否有办法查看特定终端正在使用/传递哪些变量?您可以通过键入
env
查看终端的环境。但这将是一个很长的清单。在特定程序的文档中查找需求可能更可行。我注意到您没有打印可能来自gtk launch或teamviewer的错误消息。这些可能会确切地告诉你出了什么问题。您可能需要编写一个短循环,从p.getErrorStream()读取并打印出来,然后在单独的线程中运行。它没有打印任何有用的东西/您是否检查过那些不启动的程序是否需要来自环境的任何信息,例如显示器等,这些信息在您通过终端启动时可能会传递给它们,但在通过Java启动时可能不会传递给它们?听起来似乎有道理。。。我怎么检查这个?是否有办法查看特定终端正在使用/传递哪些变量?您可以通过键入
env
查看终端的环境。但这将是一个很长的清单。在特定程序的文档中查找需求可能更可行。我注意到您没有打印可能来自gtk launch或teamviewer的错误消息。这些可能会确切地告诉你出了什么问题。您可能需要编写一个短循环,从p.getErrorStream()读取并打印出来,然后在单独的线程中运行。它没有打印任何有用的东西/