シェルスクリプトから開始されるJavaプロセスを話すブリッジを作成します。以下のような何か:
startreader.sh
#!/bin/bash
echo "" > inputbridge.txt
tailf inputbridge.txt | java SampleRead
SampleRead.java
import java.util.Scanner;
public class SampleRead {
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
int readValue = 0;
while((readValue = scanner.nextInt()) != 5) {
System.out.println("Send me something other than " + readValue);
}
System.out.println("Good job. Bye");
}
}
NumberGenerator.java
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class NumberGenerator {
public static void main(String [] args) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder("./startreader.sh");
Process process = processBuilder.start();
Scanner processStreamReader = new Scanner(process.getInputStream());
String processInputString = null;
do {
try(FileWriter fileWriter = new FileWriter("inputbridge.txt", true)) {
fileWriter.write(((int)(Math.random() * ((10 - 1) + 1)) + 1) + "\n");
} catch(IOException e) {
e.printStackTrace();
}
processInputString = processStreamReader.nextLine();
System.out.println(processInputString);
} while(processInputString.startsWith("Send me something other than"));
}
}
を実行する手順:
- コンパイル
SampleRead.java
とNumberGenerator.java
- が
startreader.sh
- 実行
java NumberGenerator
出力
[[email protected] java]$ java NumberGenerator
Send me something other than 1
Send me something other than 6
Send me something other than 8
Send me something other than 4
Good job. Bye
[[email protected] java]$ cat inputbridge.txt
1
6
8
4
5
のための実行権限を提供します
この仕組み: 橋をNumberGenerator
とSampleRead
間startreader.sh
によって生成されたinputbridge.txt
ファイルです。 NumberGenerator
を実行するとstartreader.sh
を実行し、inputbridge.txt
を生成して空にします。 startreader.sh
の次の段階は、をinputbridge.txt
ファイルにします。このファイルに書き込まれた新しい行は、tailf
プロセス経由でSampleRead
への入力になります。
それは価値5の値5が出力されます「私に何かを送信...」読まれる以外の場合NumberGenerator
がランダムに番号を選び、それがSampleRead
で受信します、inputbridge.txt
に書き込むことによってSampleRead
に送信し、チェックNumberGenerator
からProcessInputStream
まで
このアプローチは、シェルスクリプトの実行後にJavaプロセスの存在を確認することで強化する必要があります。さらに、プロセスは手動で終了するまで終了しません。したがって、tailf
は、実行を終了するタイミングを知るためにNumberGenerator
種類の通信プロトコルを持つ別のプロキシJavaアプリケーションに置き換えることができます。 Javaプロキシアプリケーションを開発する場合は、ファイルの代わりにSockets
を使用することを検討してください。
こんにちは、遅い回答をおかけして申し訳ありません。しかし、私は彼女に指示したのと同じ出力を得ることはできません。私の出力は何も表示されません任意の番号を入力する場合は、空白の画面です。私が間違っている場所を教えてください –
サンプルコードを実行しようとしていますか? –
はいコードを実行しようとしています –