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

bri*_*lez 0 cocoa objective-c

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

Mar*_*n R 5

你的代码中没有一般错误,我自己试了一下.

我假设您已经在.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)

解决了这个问题.