2
Java Process/ProcessBuilder API를 사용하여 Bukkit 서버를 실외에서 실행할 수있는 작은 Java 응용 프로그램을 작성하려고합니다.출력 스트림을 사용하여 명령을 보낼 수 없습니다.
서버에서 출력을 올바르게 가져올 수 있지만 서버가 Process.getOutputStream()
(프로세스 입력 스트림에 연결됨)에 의해 반환 된 출력 스트림에 의해 작성된 명령에 응답하지 않습니다.
내 테스트 코드로이 작업을 시도했지만 효과가있었습니다. System.in
에서 읽는 별도의 프로세스가 출력 스트림에 기록 된 텍스트를 수신했습니다.
부킷은 System.in
또는 다른 것을 듣지 않습니까? 그렇지 않다면 어떻게 될 수 있습니까? 아이디어가 있으십니까? 내가 Bukkit을 생각하지 않는다
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();
}