0

我正在尝试在我的 Cocoa 应用程序中执行一个 jar。我的研究告诉我应该使用NSTask. 但是,我只能system()上班。例如:

// 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];

当我运行我的应用程序时,我得到一个 class not found Java 异常,因为它找不到它的依赖项。

4

1 回答 1

5

您的代码中没有一般错误,我自己尝试过。

我假设您已经在.profile.bashrc或其他任何内容中定义了执行 Java 文件所需的CLASSPATH环境变量。

system()使用 shell 执行您的命令,因此 CLASSPATH 由java命令继承。

NSTask另一方面,使用外壳,因此java不会从您的配置文件中了解 CLASSPATH。

解决方案是添加@"-cp", @"<your class path>"参数。

更新

正如讨论中发现的那样,这种情况下的问题不是类路径,而是当前工作目录。添加

[task setCurrentDirectoryPath:@"/path/to"]

解决了这个问题。

于 2012-08-14T09:40:47.237 回答