java - 使用 nstask 从 swift 应用程序运行 jar 文件

标签 java macos swift jar nstask

我正在尝试从我的 swift 应用程序执行 jar 文件。我使用下面的代码:

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("MyJar", ofType: "jar")!

let task = NSTask()
task.launchPath = "/usr/bin/java"
task.arguments = ["-jar", path, arg]

let pipe = NSPipe()
task.standardOutput = pipe
task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)!
print(output)

当我从 xcode 执行应用程序时它运行良好,但是当我从应用程序图标启动应用程序时它不起作用,我不明白为什么......

编辑: 所以我在我的代码中添加了一些 NSLog() :

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("AudioTagger", ofType: "jar")!

NSLog("%@", "jar path : \(path)")

let task = NSTask()
task.launchPath = "/usr/bin/java"
task.arguments = ["-jar", path, xml]

let pipe = NSPipe()
task.standardOutput = pipe
let errorPipe = NSPipe()
task.standardError = errorPipe
task.launch()
task.waitUntilExit()

NSLog("%@", "Task is finished")

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)!

let errorData = pipe.fileHandleForReading.readDataToEndOfFile()
let errorOutput: String = NSString(data: errorData, encoding: NSUTF8StringEncoding)!

NSLog("%@", output)
NSLog("%@", errorOutput)

我将其输入控制台:

16:41:09 MyApp: jar path : /Users/User/Library/Developer/Xcode/DerivedData/MyApp-fbeddkvghwjpjpgvrkrfzbjxjvse/Build/Products/Release/MyApp.app/Contents/Resources/MyJar.jar
16:41:09 MyApp: Task is finished
16:41:14 Console: Failed to connect (_consoleX) outlet from (NSApplication) to (ConsoleX): missing setter or instance variable

标准错误似乎是空的,所以我还是不明白......

最佳答案

检查您的 Bundle Resources 中是否有您的 jar。

因为如果您使用 NSBundle,则还需要在 Bundle Resources 中包含 Jar。

如果那里没有它,则必须在 Build Phases 下将 JAR 添加到 Xcode 目标中以Copy Bundle Resources

关于java - 使用 nstask 从 swift 应用程序运行 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28172294/

相关文章:

java - 替换 Java 字符串中的短划线字符

java - 归并排序实现给出了 StackOverflow

macos - 如何使用 SwiftUI 显示触控条按钮?

android - Mac Eclipse 不解析 NDK 中的 C++ lib 函数

macos - 与启用了kext的证书的Kext协同设计在kextload期间 "code signature invalid"失败

ios - 无法在 xcode 项目中测试网络调用

java - 使用 Flying Saucer 在内存中将图像渲染为 PDF

java - 多线程 Java - 同步 - 警告 Android Studio

iOS 数字键盘,能够打开文本键盘

objective-c - 屏蔽节点的语法