У меня есть простое Java-приложение, которое читает из stdin a и пишет в stdout «Ваше сообщение $ {line}».
fun main(args: Array<String>) {
val console = Scanner(System.`in`)
while(console.hasNext()) {
val message = console.next()
println("Your message is $message")
if(message == "quit"){
break
}
}
}
Затем я хочу использовать это приложение в своем расширении для сафари.Я поместил это приложение в задачу внутри класса Singleton
import Foundation
public class Messenger {
let task = Process()
let sksjStdin = Pipe()
let sksjStdout = Pipe()
static let shared = Messenger()
init() {
task.launchPath = "/usr/bin/java"
task.currentDirectoryPath = "/Users/username"
task.arguments = ["-jar", "./hello.jar"]
task.standardInput = sksjStdout
task.standardOutput = sksjStdin
}
public func start() {
self.task.launch()
}
public func stop(){
self.task.terminate()
}
public func sendMessage(message : String) -> String {
self.sksjStdin.fileHandleForWriting.write(message.data(using: .utf8)!)
var response = Data()
repeat{
response = sksjStdout.fileHandleForReading.availableData
} while (response.count == 0)
return String(data : response, encoding: .utf8)!
}
};
Я поместил в AppDelegate код, который запускает службу
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
Messenger.shared.start()
// Insert code here to initialize your application
}
func applicationWillTerminate(_ aNotification: Notification) {
Messenger.shared.stop()
// Insert code here to tear down your application
}
}
И затем я хочу передать сообщение этому приложениюиз обработчика расширений сафари, но я не могу этого сделать.Я использую такой код в своем расширении
Messenger.shared.sendMessage(message : "hello from extension")
В отладке XCode зависайте на линии
response = sksjStdout.fileHandleForReading.availableData
Я новичок в программировании для macOS.Может быть, кто-то может объяснить, что не так Спасибо