我正在尝试在我的Cocoa应用程序中执行一个jar。我的研究告诉我应该使用NSTask
。但是,我只能让system()
工作。 E.g:
// This works
system("cd /path/to ; /usr/bin/java -jar file.jar");
但这不起作用:
// 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];
当我运行我的应用程序时,我得到了一个未找到Java异常的类,因为它无法找到它的依赖项。
答案 0 :(得分:5)
您的代码中没有一般错误,我自己尝试过。
我假设您已在 .profile , .bashrc 中定义了一个 CLASSPATH 环境变量,或者执行Java文件。
system()
使用shell执行命令,因此java
命令继承了CLASSPATH。
NSTask
不使用shell,因此java
无法从您的个人资料中了解CLASSPATH。
解决方案是将@"-cp", @"<your class path>"
添加到参数中。
<强>更新强>
正如在讨论中所说,这种情况下的问题不是类路径,而是当前工作目录。添加
[task setCurrentDirectoryPath:@"/path/to"]
解决了这个问题。