У меня запущена Java-программа на фоне моей быстрой программы.Java-программа может читать пользовательский ввод в командной строке.Как я могу передать «команды» или текстовую строку в jar после того, как он был запущен?
Точно так же, как программа ниже читает из программы java, как я могу тогда «ответить» на нее?
let b = Bundle.main
let path = b.path(forResource: "myjar", ofType: "jar")!
NSLog("%@", "jar path : \(path)")
task.launchPath = "/usr/bin/java"
task.arguments = ["-jar", path]
let pipe = Pipe()
task.standardOutput = pipe
let errorPipe = Pipe()
task.standardError = errorPipe
task.launch()
let outHandle = pipe.fileHandleForReading
outHandle.waitForDataInBackgroundAndNotify()
var progressObserver : NSObjectProtocol!
progressObserver = NotificationCenter.default.addObserver(
forName: NSNotification.Name.NSFileHandleDataAvailable,
object: outHandle, queue: nil){
notification -> Void in
let data = outHandle.availableData
if data.count > 0 {
if let str = String(data: data, encoding: String.Encoding.utf8) {
NSLog("%@", str)
}
outHandle.waitForDataInBackgroundAndNotify()
} else { NotificationCenter.default.removeObserver(progressObserver)
}
}
Затем я попытался без удачи:
pipe.fileHandleForWriting.write("text to send to java program".data(using: String.Encoding.utf8)