一个傻瓜问题,但我真的无法使其工作: 我在一个Swing应用程序中拥有一些长时间运行的进程,可能需要几分钟。我希望在该过程进行时向用户显示进度对话框。我还想防止用户执行进一步的操作,例如按下按钮,而此时进程正在进行中。
如果我在EDT上执行进程,这显然会阻止最终用户在进程进行时做任何事情。但是由于EDT正在忙于处理,因此它永远不会渲染对话框内容,所以我只能得到对话框的轮廓。
但是,如果我在工作线程中执行进程,则最终用户可以单击按钮并导致EDT在同时操纵工作器也在操纵状态,从而导致不良结果。如果我将对话框设置为模态,那就不会发生这种情况,但在Swing中,“模态”也意味着“阻塞”,因此一旦调用setVisible(true),线程就会永久阻塞。
因此,我目前的“解决方案”是使用工作线程,然后生成一个专门用于吸收setVisible阻塞性质的单独线程。肯定还有更好的解决方案!
那么,我如何获得一个对话框,它可以防止用户与系统的其余部分进行交互(模态),但不会阻塞导致其可见的线程?
如果我在EDT上执行进程,这显然会阻止最终用户在进程进行时做任何事情。但是由于EDT正在忙于处理,因此它永远不会渲染对话框内容,所以我只能得到对话框的轮廓。
但是,如果我在工作线程中执行进程,则最终用户可以单击按钮并导致EDT在同时操纵工作器也在操纵状态,从而导致不良结果。如果我将对话框设置为模态,那就不会发生这种情况,但在Swing中,“模态”也意味着“阻塞”,因此一旦调用setVisible(true),线程就会永久阻塞。
因此,我目前的“解决方案”是使用工作线程,然后生成一个专门用于吸收setVisible阻塞性质的单独线程。肯定还有更好的解决方案!
那么,我如何获得一个对话框,它可以防止用户与系统的其余部分进行交互(模态),但不会阻塞导致其可见的线程?