状況を理解するために、私が達成しようとしていることを説明しようとしています: 別の Java プログラム (Minecraft サーバー) を起動し、その出力を監視し、それに応じて入力にコマンドを送信する Java プログラムを作成したいと思います。
コードから jar プログラムを開始することができました。また、現在は jar プログラムの出力をコンソールに出力するだけの出力リスナーを作成することもできました。
コードから実行している jar プログラムには、メッセージを表示するテキスト出力パネルと、コマンドを入力できる入力フィールド (テキストエリア) を備えた GUI があります。私の問題は、コードを開始してプログラムを開始すると、プログラムの入力フィールドに直接書き込むまで、すべてが正常に機能することです。入力フィールドに文字を入力すると、GUI がフリーズします。
私は何を間違っていますか?
これが私のコードです:
public static void main(String[] args) {
try {
System.out.println("Starting.");
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java -jar \"D:\\Program Files\\mc\\minecraft_server.jar\"");
// output both stdout and stderr data from proc to stdout of this process
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream());
errorGobbler.start();
outputGobbler.start();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
出力リーダー:
public class StreamGobbler extends Thread {
InputStream is;
// reads everything from is until empty.
StreamGobbler(InputStream is) {
this.is = is;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
前もって感謝します!:)