Zar*_*nen 16 swing modal-dialog nonblocking progressdialog
一个愚蠢的问题,但我真的无法让它工作:我在Swing应用程序中有一些长时间运行的过程可能需要几分钟.我希望在此过程正在进行时向用户显示进度对话框.我还想阻止用户执行进一步的操作,例如在进行过程中按下按钮.
如果我在EDT上执行此过程,这显然会阻止最终用户在进程中执行任何操作.但是因为EDT正在忙于处理,所以它永远无法渲染对话框的内容,因此我只是得到了对话框的轮廓.
但是如果我在工作线程中执行该过程,最终用户可以单击按钮并使EDT操纵工作者同时也在操作的状态,结果是坏事.如果我创建对话框模态,那不会发生,但Swing中的模态也意味着阻塞,所以在我调用的那一刻setVisible(true)
,线程永远阻塞.
所以我当前的"解决方案"是使用一个工作线程,然后产生一个单独的线程,其唯一目的是吸收阻塞性质setVisible
.肯定有一个更好的解决方案!
那么我如何得到一个对话框,阻止用户与系统的其余部分(模态)交互,但不阻止导致它可见的线程?
App*_*rew 15
您应该使用GlassPane阻止用户进行交互.好处是这是用户的模态,而不是你的程序,所以你的线程不会被阻止.
好消息是,您还可以将它用于很酷的GUI效果,例如将GUI部分着色为阴影,用户无法与之交互.您还可以在GlassPane中显示繁忙的GIF图像.
链接:-
归档时间: |
|
查看次数: |
5099 次 |
最近记录: |