问题是您需要异步执行计算。您应该创建一个执行计算的后台线程,然后使用SwingUtilities.invokeLater更新Jtextarea。
final ArrayList <String> mylinks = // ...(新线程(){ public void run(){ 对于(String s:mylinks){ 尝试{ 最终的String结果= linkChecker.checkFileStatus(s)+“ n”; SwingUtilities.invokeLater(new Runnable(){ public void run(){ jtextarea2.append(result); } }); }捕获(IOException错误){ //处理错误 } } }})。开始();
编辑
已经指出,Jtextarea的append函数实际上是线程安全的(不同于大多数Swing函数)。因此,对于这种情况,不需要通过invokeLater更新它。但是,您仍然应该在后台线程中进行处理,以便允许GUI更新,因此代码为:
final ArrayList <String> mylinks = // ...(新线程(){ public void run(){ 对于(String s:mylinks){ 尝试{ jtextarea2.append(linkChecker.checkFileStatus(s)+“ n”); }捕获(IOException错误){ //处理错误 } } }})。开始();
但是,几乎所有其他修改Swing对象的 *** 作都需要使用invokeLater(以确保修改发生在GUI线程中),因为几乎所有的Swing函数都不是线程安全的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)