我有个问题。需要将process.getErrorStream(),process.getInputStream()和process.getOutputStream()重定向到JTextPane。
Process位于类A中,而JTextPane位于类B中,因此它们之间没有直接连接。为此,我创建了界面。因此,我可以调用方法notifyListener(String message),该方法将行追加到JTextPane。但是我找不到任何可以解决我的问题的解决方案。是否有任何简便的解决方案?
谢谢。
最佳答案
您需要的是几个线程,它们从get*Stream
方法返回的输入流中读取数据并追加到文本区域中。
就像是:
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream());
new Thread(new Runnable() {
String line ;
while ((line = reader.readLine()) != null) {
interfaceObject.informListener(line);
}
}).start();
只需确保使用
textPane
在EDT中添加到SwingUtilities.invokeLater
。以下程序有效。 (我在OS X上):
package snippet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ProcessOutput {
public static void main(String[] args) throws IOException, InterruptedException {
final Process p = Runtime.getRuntime().exec("ls -lR");
final BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
new Thread(new Runnable() {
@Override public void run() {
try {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ex) {
}
}
}).start();
int waitFor = p.waitFor();
System.out.println(waitFor + " is the return");
}
}
检查命令构造是否正确。可能只是将其打印出来,看看是否能够从cmdline执行它。
关于java - 控制台提示到JTextPane,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32433321/