2
Java Process/ProcessBuilder APIを使用してBukkitサーバをオフスクリーンで実行できる小さなJavaアプリケーションを作成しようとしています。出力ストリームを使用してコマンドを送信できません
サーバーからの出力を正常に取得できましたが、サーバーはProcess.getOutputStream()
(プロセス入力ストリームにチェーンされています)によって返された出力ストリームによって書き込まれたコマンドに応答しません。
私自身のテストコードでこれを試してみたところ、うまくいきました。 System.in
から別のプロセスの読み取りが、出力ストリームに書き込まれたテキストを受信しました。
ブキットはSystem.in
などを聞いていませんか? そうでない場合は、どうすればよいでしょうか? アイデア
try {
ProcessBuilder pb = new ProcessBuilder();
File dir = new File("C:/Users/Brian/Desktop/MC-Server/Bukkit-Testing");
pb.directory(dir);
pb.command(new String[] {"java", "-Xincgc", "-Xmx1G", "-jar", "craftbukkit-1.0.1-R1.jar"});
pb.redirectErrorStream(true);
final Process p = pb.start();
InputStream out = p.getInputStream();
BufferedReader r1 = new BufferedReader(new InputStreamReader(out));
String s = null;
new Thread(new Runnable() {
@Override
public void run() {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
Scanner scan = new Scanner(System.in);
String input = null;
while((input=scan.nextLine()) != null) {
if(input.equals("exit")) {
p.destroy();
break;
}
try {
bw.write(input);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
while((s=r1.readLine()) !=null)
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}