我有个问题。需要将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/

10-12 06:15