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
中的那个线程。