2016-12-21 11 views
2

自分のJavaアプリケーションで実行中のアプリケーションからすべての出力を読み込みます。現在、私は2つの画面を持っています。最初は出力アプリケーションが新しい情報を永久に、2番目をJavaアプリケーションで表示します。残念ながら、両方のアプリケーションを1つの画面で実行することはできません。私の考えは、すべての出力をJavaアプリケーションの画面にパイプしてそこに読み込むことでしたが、間違っているか動作しません。Linuxのコマンドライン出力を別の画面に送ります。

マイ(テスト)サーバは次のようになります。

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" 

誰もがこれを実現する方法を知っている、またはそこにあります1つの画面でそれらを実行させる方法ですか?手伝ってくれてありがとう。

答えて

0

私はこれについてはあまりよく分かりませんが、正しい方向に向けることができます。最初に "ProcessBuilder"を使用してアプリケーションを起動しなければならず、プロセスを作成した後に出力ストリームを読むために入力ストリームリーダーが必要になります。あなたは今、私は簡単にインターフェースを持っているBufferedReaderのを使用してrecommandうアプリの出力で読むことができます

ProcessBuilder b = new ProcessBuilder("myapp"); 
Process app = builder.start(); 

//app is running now read its output 
InputStreamReader stream = new InputStreamReader(app.getInputStream()); 

のコードでは、次のようになります。私はいつもこのようなストリームから読む:

BufferedReader br = new BufferedReader(stream)) 

for(String line; (line = br.readLine()) != null;) 
{ 
    ProcessLine(line); 
} 

私はこれが少しあなたを助けてくれることを願っています。

関連する問題