【发布时间】:2014-10-22 23:08:26
【问题描述】:
我遇到了某种输出到 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 界面在此操作期间挂起。你不能点击任何东西,即使是靠近窗户的地方。界面完全冻结。
【问题讨论】:
-
为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)。
-
鉴于没有'?'用这些话 - 你的问题是什么?
标签: java swing concurrency