如何在Cocoa App中打开一个jar文件

时间:2012-08-14 07:24:55

标签: objective-c cocoa

我正在尝试在我的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异常的类,因为它无法找到它的依赖项。

1 个答案:

答案 0 :(得分:5)

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

我假设您已在 .profile .bashrc 中定义了一个 CLASSPATH 环境变量,或者执行Java文件。

system()使用shell执行命令,因此java命令继承了C​​LASSPATH。

另一方面,

NSTask 使用shell,因此java无法从您的个人资料中了解CLASSPATH。

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

<强>更新

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

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

解决了这个问题。