gpt4 book ai didi

swing - 非阻塞模态 Swing 进度对话框

转载 作者:行者123 更新时间:2023-12-03 14:55:57 30 4
gpt4 key购买 nike

一个愚蠢的问题,但我真的无法让它起作用:我在 Swing 应用程序中有一些长时间运行的过程,可能需要几分钟。我想在此过程进行时向用户显示进度对话框。我还想阻止用户执行进一步的操作,例如在进程进行时按下按钮。

如果我在 EDT 上执行该过程,这显然会阻止最终用户在该过程进行时进行任何操作。但是因为 EDT 忙于处理,它永远不会渲染对话框的内容,所以我只得到对话框的轮廓。

但是,如果我在工作线程中执行该过程,最终用户可以单击按钮并导致 EDT 操纵工作人员同时也在操纵的状态,结果是糟糕的事情。如果我使对话框模态,那不会发生,但 Swing 中的模态也意味着阻塞,所以我打电话的那一刻 setVisible(true) ,线程永远阻塞。

所以我目前的“解决方案”是使用一个工作线程,然后产生一个单独的线程,其唯一目的是吸收 setVisible 的阻塞性质。 .当然必须有更好的解决方案!

那么如何获得一个对话框,阻止用户与系统的其余部分(模态)交互,但不阻止导致它可见的线程?

最佳答案

您应该使用 GlassPane 阻止用户交互。好消息是这对用户来说是模态的,而不是你的程序,所以你的线程不会被阻塞。

好消息是,您还可以将它用于很酷的 GUI 效果,例如对繁忙的 GUI 部分进行着色并且用户无法与之交互。您还可以在 GlassPane 中显示繁忙的 gif 图像。

链接:-

  • Official tutorial on GlassPane
  • Some helpful tutorials
  • Another tut
  • Oreilly's Swing Hacks非常好。
  • 关于swing - 非阻塞模态 Swing 进度对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886264/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com