在Java程序中执行一个.app文件

3

我需要在我的Java应用程序中执行外部程序。我正在Mac上编程,并且希望在用户选择时运行一个.app应用程序。在Windows上成功运行它的方式是:

String cmd = "path_to_executable\program.exe\"";

Process p = Runtime.getRuntime().exec(cmd);

但是对于.app文件,这个方法无法生效。我已经打开了.app文件的内容,并找到了一个Unix可执行文件以及其他支持应用程序的文件。Unix可执行文件是否等同于.exe文件?

3个回答

7

在OS X上从Java启动Mac应用程序只需要调用内置的open命令并将应用程序作为参数传递即可。在OS X中,open命令行工具知道如何正确打开许多不同类型的文件,包括应用程序包。如果您要尝试启动TextEdit.app应用程序,则应调用:

open /Applications/TextEdit.app

在Java中,你需要使用:
String cmd = "open /Application/TextEdit.app";
Process p = Runtime.getRuntime().exec(cmd);

一个更加简洁的解决方案,+1。 - Vineet Kosaraju
可执行文件位于.app文件夹内,向下2个文件夹。例如:打开.app文件夹,我找到了文件夹:contents/MacOS/linux可执行文件。你提到的命令行工具是否知道要查找那么多层文件夹以找到Linux可执行文件,或者我应该在路径中考虑这些额外的文件层?没有任何东西因为你建议的更改而打开。也没有捕获到任何错误。 - mdl11
“打开”命令将应用程序包信息传递给Finder。然后,Finder会像您双击它一样启动应用程序。Finder知道如何排列应用程序包并知道如何启动它们。 - John Haager

1

是的,您应该运行位于.app包中的Unix可执行文件。但它可能无法正常工作,您可能需要进入目录或其他操作。

大多数应用程序二进制文件位于Contents/MacOS/App Name中。您可以创建一个方法,该方法将接受一个字符串名称并根据标准目录执行该二进制文件。


0

.app文件实际上只是一个文件夹。这是在Mac上自包含应用程序的一种方式。实际的二进制文件很可能是您找到的Unix可执行文件。了解有关应用程序的一些详细信息将有所帮助。

.app的二进制文件位于Application.app/Contents/MacOS中。


这个应用程序叫做Mr. Tides。当用户选择它时,我们的Java应用程序需要运行这个外部应用程序。我对路径名有点困惑。我有正确的Unix可执行文件路径,但是我收到一个错误,说“没有这样的文件或目录”。我在.app文件夹中找到的可执行文件名为Mr. Tides,Mr.和Tides之间有一个空格。我应该在路径中使用它吗?我需要使用.bin扩展名吗? - mdl11
当文件名中有空格时,您可能需要对其进行转义。例如,如果应用程序文件位于硬盘的根目录中,则可执行文件的路径为/Mr.\ Tides.app/Contents/MacOS/Mr.\ Tides - spex
Mr. Tides可执行文件在路径名的末尾是否应该有一个扩展名,例如.exe?例如/Mr.\ Tides.app/Contents/MacOS/Mr.\ Tides.SOMETHING。 - mdl11
mld11:不,OS X上的原始可执行文件没有扩展名,就像Linux一样。 - John Haager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接