我想做什么?
我正在尝试基于这种架构编写应用程序:
- chrome 扩展程序在我的计算机上启动应用程序(.jar文件( 应用程序
- 启动另一个应用程序(外部的,不是我写的(,我正在向它传递数据,它向用户显示窗口,用户向其输入一些数据,然后此应用程序将数据返回给父应用程序
- 父应用处理子应用响应并将其发送回 chrome 扩展程序
怎么了?
当显示子应用的窗口时,chrome 扩展程序将断开连接(它恰好同时发生(。接下来,结果不会回到chrome扩展程序。
什么有效:
- 如果我省略第 2 点(只是嘲笑子应用程序的答案(,结果将返回到 chrome 扩展程序。
- 包括所有点:子应用正确返回其结果。父应用捕获它并尝试将其返回到 chrome 扩展程序(不成功,扩展程序已断开连接(
也尝试过
我尝试使用 java 多线程(ExecutorCompletionService、Callable、Future(来做到这一点,我想在单独的线程中启动子应用程序并阻止主线程,直到孩子完成,它没有帮助。
解决了!
chrome 扩展程序和我的应用之间的通信是通过标准输入/输出进行的。在我的应用程序代码(用java编写(的某个地方调用了System.out.println
。它在 STDOUT 上弄得一团糟,并使应用程序与扩展程序断开连接。它发生在我所看到的启动外部应用程序的同时,可能不是完全在同一时间发生的,而是在之前/之后的一段时间,这是人看不到的。
多线程与此问题无关。
溶液
我找到并删除了所有写入标准输出的代码