有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java并发冲突试图在JTextArea中使用BufferedWriter

我在输出到JTextArea时遇到了某种线程问题。我设置了一个BufferedWriter来写入这个文本区域,但由于某些原因,它在当前函数完成之前不会写入这个区域。例如,我有一段代码,可以检查URL列表,看看它们是好是坏:

for( final String s : urls ){
    String sContent = IO.getURLContent( s );
    if( sContent == null ){
        writeLine( "Error " + s );
    } else {
        writeLine( "Worked " + s );
    }
}

void writeLine( String sLineText ) throws java.io.IOException {
    mbwriter.write(sLineText);
    mbwriter.newLine();
    mbwriter.flush();
}

输出仅在循环完成后发生,即使在检查每个URL后刷新写入程序。我尝试将IO操作放在一个单独的线程中,如下所示:

for( final String s : urls ){
SwingUtilities.invokeLater( new Runnable() {
    public void run(){
        String sContent = IO.getURLContent( s );
            if( sContent == null ){
                writeLine( "Error " + s );
            } else {
                writeLine( "Worked " + s );
            }
        }
    }
} );
}

但这没有什么区别,输出仍然被阻塞,直到整个循环完成

请注意,在此操作期间,整个Swing接口将挂起。你不能点击任何东西,即使是靠近窗户的。界面完全冻结


共 (0) 个答案