Java 如何在并行运行TestNG测试时将系统重定向到两个不同的JTextArea

Java 如何在并行运行TestNG测试时将系统重定向到两个不同的JTextArea,java,swing,logging,system,testng,Java,Swing,Logging,System,Testng,我们已经使用JavaSwings实现了GUI来运行自动化脚本。 对于执行单个测试,我们可以通过引用将系统重定向到JTextArea, 但是,当通过两个不同的线程并行运行测试时,我们无法分别将系统从每个测试中拖出,控制台中的日志越来越多 他们有没有办法将系统分离或重定向到两个不同的JTextArea 我正在使用Win7 OS env和Selenium。TestNG、Log4j和Swings您如何决定将内容定位在何处?是否可以使用线程id或任何其他参数 public class CustomOutp

我们已经使用JavaSwings实现了GUI来运行自动化脚本。 对于执行单个测试,我们可以通过引用将系统重定向到JTextArea, 但是,当通过两个不同的线程并行运行测试时,我们无法分别将系统从每个测试中拖出,控制台中的日志越来越多

他们有没有办法将系统分离或重定向到两个不同的JTextArea


我正在使用Win7 OS env和Selenium。TestNG、Log4j和Swings

您如何决定将内容定位在何处?是否可以使用线程id或任何其他参数

public class CustomOutputStream extends OutputStream {
    private JTextArea textArea1;
    private JTextArea textArea2;

    public CustomOutputStream(JTextArea textArea1, JTextArea textArea2) {
        this.textArea1 = textArea1;
        this.textArea2 = textArea2;
    }

    @Override
    public void write(int b) throws IOException {
        //How to recognize proper target textarea? e.g. by thread id
        if (Thread.getCurrentThread().getId()==theFirstThreadId) {
            // redirects data to the text area
            textArea1.append(String.valueOf((char)b));
            // scrolls the text area to the end of data
            textArea1.setCaretPosition(textArea1.getDocument().getLength());
        }
        else {
            //the same for textArea2
        }
    }
}

只需提供一个文本区域的第二个引用,并将输出也回送到它……如果两个测试并行运行,并且如果我将sys输出回送到diff JTextArea,我将如何获得每个JTextArea中测试方法的特定日志?目前在我的EclipseJava控制台中,我可以看到这两种测试方法的混合日志。System.out仅用于单个流。您“可能”能够基于当前线程+1重定向输出,但如果没有invokeLater for append,这在Java7中不起作用,因为Swing中的所有线程安全方法都不存在…@mKorbel我只是从问题扩展了示例中提到的行为