我想在我自己的java应用程序中读取正在运行的应用程序的所有输出。目前我有2个屏幕,第一个输出应用程序永久打印新信息,第二个打印java应用程序。遗憾的是,无法在一个屏幕上运行这两个应用程序。我的想法是将所有输出传递到java应用程序屏幕以在那里读取它,但我做错了或者它不起作用。
我的(测试)服务器如下所示:
public class Main {
public static void main(String[] args) throws InterruptedException {
while (true) {
Scanner scanner = new Scanner(System.in);
String output = scanner.next();
System.out.print("JAVA " + output);
}
}
}
和我的linux启动文件如下:
#!/bin/bash
cd ../../raspberry-remote/
screen -dmS smarthome_javaserver #here runns the java application
screen -dmS smarthome_receive | smarthome_javaserver #send the output to the java screen
#start java app
screen -S smarthome_javaserver -p 0 -X stuff "java -jar ServerReceiver.jar^M"
#start receive tool
screen -S smarthome_receive -p 0 -X stuff "pilight-daemon -D^M"
screen -S smarthome_receive -p 0 -X stuff "pilight-daemon -D^M"
echo "started receiver"
任何人都知道如何实现这一点,还是有办法让他们在一个屏幕上运行?谢谢你的帮助。
答案 0 :(得分:1)
我对此并不十分肯定,但我可以指出你正确的方向。首先,你必须使用“ProcessBuilder”启动你可以做的应用程序,在创建过程后,你需要一个输入流阅读器来读取输出。
在代码中它看起来像这样:
ProcessBuilder b = new ProcessBuilder("myapp");
Process app = builder.start();
//app is running now read its output
InputStreamReader stream = new InputStreamReader(app.getInputStream());
您现在可以使用BufferedReader读取我想要的app输出,该缓冲区具有更简单的界面。我总是从这样的流中读到:
BufferedReader br = new BufferedReader(stream))
for(String line; (line = br.readLine()) != null; )
{
ProcessLine(line);
}
我希望这能帮到你一点点。