繁体   English   中英

快速将命令传递到jar文件

[英]Swift pass commands into a jar file

我的Swift程序在后台运行了一个Java程序。 Java程序可以在命令行中读取用户输入。 启动jar后,如何将“命令”或文本行传递到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)

你很亲密 如果您只是添加了代码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)
   ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM