【发布时间】:2011-04-22 14:59:14
【问题描述】:
一个愚蠢的问题,但我真的无法让它工作:我在 Swing 应用程序中有一些长时间运行的进程,可能需要几分钟。我想在此过程进行时向用户显示进度对话框。我还想阻止用户执行进一步的操作,例如在进程进行时按下按钮。
如果我在 EDT 上执行该过程,这显然会阻止最终用户在该过程进行时执行任何操作。但是因为 EDT 正忙于处理,它从来没有时间渲染对话框的内容,所以我只得到了对话框的轮廓。
但如果我在工作线程中执行该过程,最终用户可以单击按钮并导致 EDT 操纵工作人员同时也在操纵的状态,坏东西为一个后果。如果我将对话框设为模态,则不会发生,但 Swing 中的 modal 也意味着 阻塞,所以当我调用 setVisible(true) 时,线程将永远阻塞。
所以我目前的“解决方案”是使用一个工作线程,然后产生一个单独的线程,其唯一目的是吸收setVisible 的阻塞特性。肯定有更好的解决方案!
那么我如何获得一个对话框来阻止用户与系统的其余部分(模态)交互但不阻塞导致它可见的线程?
【问题讨论】:
标签: swing modal-dialog nonblocking progressdialog