objective-c - 如何在 Cocoa 应用程序中打开 jar 文件

标签 objective-c cocoa

我正在尝试在我的 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];

当我运行我的应用程序时,我收到一个类未找到 Java 异常,因为它找不到其依赖项。

最佳答案

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

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

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

NSTask另一方面使用shell,所以java不会从您的个人资料中了解 CLASSPATH。

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

更新

正如讨论中所表明的,本例中的问题不是类路径,而是当前工作目录。添加

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

解决了问题。

关于objective-c - 如何在 Cocoa 应用程序中打开 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11947609/

相关文章:

cocoa - 开始使用适用于 OS X 的 Cocoa?

objective-c - 如何在ios中获取接入点的mac地址?

objective-c - objective c 将一个对象设置为一个未知的类

cocoa - 如何以编程方式在 Mail.app 中设置所有邮件帐户?

objective-c - 订购特定格式数字的 NSString(例如 3 :23. 123)?

cocoa - 当我的对象销毁时,我需要删除观察者吗?

ios - xcode 4.2 ios 5 复制 Storyboard的内容

iOS - SSL 握手 - 客户端证书 - NSURLSession - NSURLErrorDomain 代码=-1200 - 错误链

ios - 添加对象到 NSMutableArray

objective-c - 如何使窗口处于事件状态或获得焦点?