我正在使用Swing的ProgressMonitor。
这会为我生成一个很好的对话框:

老实说,我认为ProgressMonitor的设计存在一个缺陷:如果用户通过按红/白十字键关闭对话框,您认为会发生什么?是的,你猜到了:它只会关闭/隐藏对话框,当然,不管你在后台做什么工作都会继续。无法取回对话框,afaik。
关闭窗口应该意味着“取消”或根本不允许,因为我需要用户要么等待任务完成,要么取消它。我怎样才能做到这两件事?
如果我能得到对那个JDialog的引用,那么我可以这样做:
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);但我不能得到那个推荐信。
更新和最终答案
所以,我没有告诉你整个故事。事实上,我使用的是ProgressMonitorInputStream,当然在封面下面使用的是ProgressMonitor,所以我认为这与手头的情况无关。但确实有!
当对话框关闭时,ProgressMonitor设置isCancelled标志是正确的。这可以通过查看JDK源代码来验证。但是为了捕捉到这个事件,您需要一个PropertyChangeListener。在使用ProgressMonitorInputStream时,您可能不会有一个(像我一样),因为ProgressMonitor的更新都是由ProgressMonitorInputStream负责的,所以您不必自己做这个部分。我的假设是,ProgressMonitorInputStream的存在理由是不必做样板编码。
我不得不说,与DIY方法相比,我发现使用ProgressMonitorInputStream的好处非常小,甚至是负面的。
发布于 2014-03-16 02:46:28
检查ProgressMonitor.isCanceled(),实际上,ProgressMonitorDemo是这样做的。
https://stackoverflow.com/questions/22430226
复制相似问题