2012-08-09 98 views
0

运行,我以书面形式,它使用的系统()函数来启动的Java .jar文件编译C应用程序的过程中C命令行应用程序:保持在Mac应用程序捆绑

int main() { 
    system("java -jar MyJar.jar"); 
    return 0; 
} 

我成功将其封装在可点击的应用程序包中,但是,当我双击它时,应用程序在它有机会启动该jar之前立即退出。但是,当我从命令行运行编译的C代码时,它完美地工作。

任何有识之士将不胜感激!

斯科特

回答

1

的应用程序立即退出的原因是因为下面一行:

return 0; 

您可能需要使用exec而不是system。随着exec,您的程序将被Java进程取代,并且永远不会有机会到达return 0;行。然而,它更容易只是一个shell脚本替换整个C progrma:

#!/bin/sh 
exec java -jar MyJar.jar 

书面,有没有的缺点,这种方式,我能想到的。 C程序已经产生了一个shell进程(这就是system所做的),那么为什么不首先使用shell进程呢?

很多应用程序包使用shell脚本来完成这样的事情。

+0

谢谢。我最初尝试使用shell脚本执行此操作,但它在我的应用程序包中无效。我收到一条消息,指出“您无法打开应用程序MyApp,因为它不支持此类Mac。” – Scott 2012-08-09 14:49:08

+0

嗯,有趣的是,它有正确的名称,正确的Info.plist和正确的权限? – 2012-08-09 16:36:48

+0

我实际上使用Platypus来捆绑shell脚本,它在我自己的Mac上完美运行,但它不会在我的同事的Mac上运行(反之亦然,当我的同事尝试生成捆绑时) – Scott 2012-08-10 00:17:49