我想在我的Cocoa应用程序中执行一个jar.我的研究告诉我应该用NSTask.但是,我只能system()上班了.例如:
// This works
system("cd /path/to ; /usr/bin/java -jar file.jar");
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
// This does not work
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/java"];
[task setArguments:[NSArray arrayWithObjects: @"-jar", @"/path/to/test.jar", nil] ];
[task launch];
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,我得到了一个没有找到Java异常的类,因为它无法找到它的依赖项.
你的代码中没有一般错误,我自己试了一下.
我假设您已经在.profile,.bashrc或其他任何内容中定义了CLASSPATH环境变量,这是执行Java文件所必需的.
system()使用shell执行命令,因此java命令继承CLASSPATH .
NSTask另一方面,不使用shell,因此java不会从您的个人资料中了解CLASSPATH.
解决方案是添加@"-cp", @"<your class path>"参数.
UPDATE
正如在讨论中发现的那样,这种情况下的问题不是类路径,而是当前的工作目录.添加
[task setCurrentDirectoryPath:@"/path/to"]
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.