使用消息重定向方法(Java)时出错

使用消息重定向方法(Java)时出错,java,multithreading,Java,Multithreading,几个月前,我实现了一个GUI,其中包含一个方法,基本上将控制台输出消息传输到GUI中包含的文本区域。该方法在某些计算机上运行正常(换句话说,它将消息从控制台输出传输并打印到JTextArea outputText),但在其他计算机上无法执行(未打印任何内容)。下面是一些代码: private JTextArea outputText; private void redirectSystemStreams() { OutputStream out = new OutputStream()

几个月前,我实现了一个GUI,其中包含一个方法,基本上将控制台输出消息传输到GUI中包含的文本区域。该方法在某些计算机上运行正常(换句话说,它将消息从控制台输出传输并打印到JTextArea outputText),但在其他计算机上无法执行(未打印任何内容)。下面是一些代码:

private JTextArea outputText;

private void redirectSystemStreams() {
    OutputStream out = new OutputStream() {
        @Override
        public void write(int b) throws IOException {
            updateTextArea(String.valueOf((char) b));
        }

        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            updateTextArea(new String(b, off, len));
        }

        @Override
        public void write(byte[] b) throws IOException {
            write(b, 0, b.length);
        }
    };

    System.setOut(new PrintStream(out, true));
    System.setErr(new PrintStream(out, true));
}

private void updateTextArea(final String text) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            outputText.append(text);
        }
    });
}
我相信问题在于每台计算机上安装的java版本的不同,但我不知道如何通过代码解决这个问题

更新(27.08.14):添加了有关方法行为的附加说明

更新2(27.08.14):在对我的项目进行了一点分析之后,我发现问题的存在是因为线程执行错误(在某些计算机上工作方式不同,因为没有加载此线程使用的dll…)。线程代码如下所示:

public class MyThread implements Runnable {

    private static final int sleepDelay         = 100;

    public MyThread() {}


    @Override
    public void run() {
        try {
            //do something...
            while(true) {
                Thread.sleep(MyThread.sleepDelay);
                //do something...
            }


        } catch(Exception e) {
                //do something...
            }

    }

}
重要的是要知道两个进程(
redirectSystemStreams()
和上面的线程)不访问或共享相同的对象。
我已经做了一些关于线程的研究,但我仍然对如何解决这个问题感到困惑,基本上是因为,至少对我来说,
redirectSystemStreams()
不像
MyThread
中的线程那样。。。它无法在其他人身上执行如果您真的希望我们帮助您,您应该首先帮助我们,并解释它以何种方式失败。例外情况?没有得到预期的输出(如果你,你期望什么,你得到什么)?好的,很抱歉。当我说它可以工作时,这意味着它可以在JTextArea中传输和打印输出消息。当它不起作用时,意味着在JTextArea中没有打印任何内容…寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅。您确定在所有系统上都调用了
redirectSystemStreams()
?您是否得到任何关于可能出错的提示—异常、日志消息等。?JVM版本在每个系统上是不同的还是相同的?在GUI构造方法中,redirectSystemStreams()只执行一次。在此之后,所有消息都应打印在JTextArea内。此外,没有抛出异常。PC上的Java版本代码有效:1.7.0_65 PC上的Java版本不起作用:1.7.0_60注意:在我的情况下,更新Java版本现在不应该是一个选项。。。