一个愚蠢的问题,但我真的不能让它工作:我在一个Swing应用程序中有一些长时间运行的进程,可能需要几分钟的时间。当这个过程正在进行时,我想向用户显示一个进度对话框。我还希望防止用户执行进一步的操作,例如,在进程进行时按下按钮。
如果我在EDT上进行处理,这显然会阻止最终用户在处理过程中执行任何操作。但是因为EDT正在忙于处理,所以它从来没有时间呈现对话框的内容,所以我只能得到对话框的轮廓。
但是,如果我在工作线程中执行该进程,最终用户可以单击按钮,并使EDT操作工作线程同时也在操作的状态,从而导致错误的结果。如果我将对话框设为模态,就不会发生这种情况,但是Swing中的模态也意味着阻塞,所以当我调用setVisible(true)
的时候,线程就会永远阻塞。
因此,我目前的“解决方案”是使用一个工作线程,然后产生一个单独的线程,该线程的唯一目的是吸收setVisible
的阻塞特性。当然,一定有更好的解决方案!
那么,我如何获得一个对话框来阻止用户与系统的其余部分(模式)进行交互,但又不阻止导致它可见的线程呢?
发布于 2010-10-08 16:35:15
你一定是做错了什么。请在How to Use Progress Bars上试用该教程。如果您能理解这些代码是如何工作的,那么它应该为您提供实现所需功能的方向。
请注意,进度条通常是模式的。
https://stackoverflow.com/questions/3886264
复制相似问题