2012-08-09 143 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

相關問題