[英]get Result from shell command on jTextArea
我必須從Java swing應用程序執行shell命令窗口並獲得實時結果:
String cmd = jTextField1.getText();
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println("" + line);
jTextArea1.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
問題在於,像執行System.out.println(..)一樣,在jTextArea中寫入不是實時完成。
從事件調度線程(EDT)外部更新揮桿組件時,應使用SwingWorker或調用SwingUtilities.invokeLater(),如下所示:
while ((line = reader.readLine()) != null) {
final String appendLine = line + "\n";
System.out.println("" + line);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
jTextArea1.append(appendLine);
}
});
}
嘗試創建一個線程並使用Thread.sleep()實時更新JTextArea。
創建一個如下的子類
class Work implements Runnable {
String cmd;
Work(String c) {
this.cmd = c;
}
@Override
public void run() {
Process p;
try {
p = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println("" + line);
Thread.sleep(500);
jTextArea1.append(line + "\n");
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
如下更改代碼
String cmd = jTextField1.getText();
StringBuffer output = new StringBuffer();
new Thread(new Work(cmd)).start()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.