0

我正在编写一个编译的 C 应用程序,它使用 system() 函数来启动一个 Java .jar 文件:

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

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

任何见解将不胜感激!

斯科特

4

1 回答 1

1

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

return 0;

你会想要使用exec而不是system. 使用exec,您的程序将被 Java 进程替换,并且永远没有机会到达该return 0;行。但是,用 shell 脚本替换整个 C 程序要容易得多:

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

正如所写,我能想到的这种方法没有缺点。C 程序已经产生了一个 shell 进程(就是system这样),那么为什么不首先从一个 shell 进程开始呢?

许多应用程序包使用 shell 脚本来做这样的事情。

于 2012-08-09T13:45:46.447 回答