使用消息重定向方法(Java)的错误

时间:2014-08-27 12:29:35

标签: java multithreading

几个月前,我已经实现了一个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中的那个线程。

0 个答案:

没有答案