我正在编写一个使用system()函数启动Java .jar文件的已编译C应用程序:
int main() {
system("java -jar MyJar.jar");
return 0;
}
我成功将其包装在一个可点击的应用程序包中,但是,当我双击它时,应用程序会在它有机会启动jar之前立即退出。但是,当我从命令行运行已编译的C代码时,它可以正常工作。
任何见解都将受到赞赏!
斯科特
答案 0 :(得分:1)
应用程序立即退出的原因是由于以下行:
return 0;
您可能希望使用exec
代替system
。使用exec
,您的程序将被Java进程取代,并且永远不会有机会到达return 0;
行。但是,用shell脚本替换整个C progrma要容易得多:
#!/bin/sh
exec java -jar MyJar.jar
正如所写,我认为这种方法存在 no 缺点。 C程序已经产生了一个shell进程(这就是system
所做的),那么为什么不首先从shell进程开始呢?
许多应用程序包使用shell脚本来执行此类操作。