我正在使用MessageConsole.java將標準輸出流重定向到文本窗格。完成之後,我認爲重定向錯誤流也不錯。爲此,我添加了另一個緩衝閱讀器到this的修改版本答案。接下來是我的問題所在 - 我需要process()
方法的另一個「版本」,該方法打印到System.err
而不是System.out
。我嘗試了谷歌搜索,但我的結果是沒有。我將如何添加另一個需要特定參數的重寫方法的版本?代碼可能看起來像第二個例子。如何創建另一個「版本」的過程()
我當前的代碼
class ConsoleThread extends SwingWorker<Void, String> {
String command;
ConsoleThread(String cmd) {
command = cmd;
}
@Override
protected Void doInBackground() throws Exception {
Process ps = Runtime.getRuntime().exec(command);
BufferedReader is = new BufferedReader(new InputStreamReader(ps.getInputStream()));
BufferedReader es = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
String outputLine;
String errorLine;
while ((outputLine = is.readLine()) != null) {
publish(outputLine);
}
while ((errorLine = es.readLine()) != null) {
publish(errorLine);
}
is.close();
return null;
}
@Override
protected void process(List<String> chunk) {
for (String string : chunk) {
System.out.println(string);
}
}
}
答案可能是什麼樣子的(一個代碼片段是勝過千言萬語)
class ConsoleThread extends SwingWorker<Void, String> {
String command;
ConsoleThread(String cmd) {
command = cmd;
}
@Override
protected Void doInBackground() throws Exception {
Process ps = Runtime.getRuntime().exec(command);
BufferedReader is = new BufferedReader(new InputStreamReader(ps.getInputStream()));
BufferedReader es = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
String outputLine;
String errorLine;
while ((outputLine = is.readLine()) != null) {
publish(outputLine);
}
while ((errorLine = es.readLine()) != null) {
publish2(errorLine);
}
is.close();
return null;
}
@Override
protected void process(List<String> chunk) {
for (String string : chunk) {
System.out.println(string);
}
}
@Override
protected void process2(List<String> chunk) {
for (String string : chunk) {
System.err.println(string);
}
}
}
凡process2()
會像原來process()
處理。
要清楚的是,當前的代碼可以工作,但會將任何錯誤消息發送到輸出流而不是錯誤流。 (請參閱this)
它可能不會回答這個問題,但是:我建議您考慮爲此創建一個專用的基礎結構,而不是*依賴於消息控制檯類。鏈接的答案已經顯示瞭如何寫入文本區域,您可以稍微修改一下。 – Marco13