Быстрые передачи команд в файл JAR - PullRequest
0 голосов
/ 24 июня 2018

У меня запущена 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)

1 Ответ

0 голосов
/ 24 июня 2018

Ты довольно близко. Если вы только что добавили код pipe.fileHandleForWriting.write("text to send to java program"..., он не будет работать, потому что этот канал - тот, который вы присвоили standardOutput.

Вам нужно создать еще один Pipe объект, присвоить ему standardInput и записать в него:

   ...
>> let inputPipe = Pipe()
>> task.standardInput = inputPipe
   task.launch()
>> inputPipe.fileHandleForWriting.write("text to send to java program".data(using: String.Encoding.utf8)
   ...
...