2
爲了理解這種情況,我試着描述一下我想實現的: 我想創建一個啓動另一個java程序的java程序(一個Minecraft服務器),監視它的輸出,並相應地發送命令給它的輸入。當從java代碼運行jar程序時,jar程序的gui凍結在直接輸入上
我能夠從我的代碼啓動jar程序,我也能夠爲它編寫一個輸出監聽器,它目前只能將jar程序的輸出打印到控制檯。
我從我的代碼運行的jar程序有一個文本輸出面板,它顯示消息和一個輸入字段(textarea)我可以給命令的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();
}
}
}
提前感謝! :)
爲了簡單起見,合併'out'&'err'流。實際上在那裏看到兩條溪流,我愚蠢地認爲狼吞虎嚥正在消耗輸出流,但當然它正在讀'錯誤'。 ***消費'out'流!***並通過[exec info鏈接的文章。頁面](http://stackoverflow.com/tags/runtime.exec/info)&執行所有其他建議。 –
感謝您的建議,但問題依然存在:爲什麼gui會凍結?我只是在運行這個程序。我沒有鍛鍊任何東西...... – Angezerus
很好,你實施我的建議和編輯問題..哦,等等,你沒有打擾。 *「問題依然存在:」*好吧,你是一個有着明確動機去解決問題的人,所以我會接受評論1中推薦的那些東西。祝你好運! –