【发布时间】:2014-03-15 21:51:37
【问题描述】:
我正在使用 Swing 的 ProgressMonitor。
这为我生成了这个漂亮的对话框:
老实说,我认为ProgressMonitor 的设计存在缺陷:如果用户通过按红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台进行的任何工作当然会继续。无法恢复对话框,afaik。
关闭窗口应该意味着“取消”或根本不允许,因为我需要用户等待任务完成或取消它。我如何实现这两个?
如果我能获得对那个 JDialog 的引用,那么我可以这样做:
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
但我无法获得该参考。
更新和最终答案
所以,我没有告诉你完整的故事。事实上,我使用ProgressMonitorInputStream,当然在幕后使用ProgressMonitor,所以我认为手头的情况无关紧要。但确实如此!
Andrew 说在对话框关闭时ProgressMonitor 设置isCancelled 标志是正确的。这可以通过查看 JDK 源来验证。但为了赶上该事件,您需要PropertyChangeListener。使用ProgressMonitorInputStream 时,您可能没有(像我一样),因为更新ProgressMonitor 全部由ProgressMonitorInputStream 负责,因此您不必自己做那部分。我假设ProgressMonitorInputStream 的存在理由是不必进行样板编码。
我不得不说,与 DIY 方法相比,我发现使用 ProgressMonitorInputStream 的好处非常小,甚至是负面的。
【问题讨论】:
-
我在发布问题后才看到this。我想这有点相关。据我所知,ProgressMonitors 根本不适合您想要完全控制的任务。
-
你可以看看
ProgressMonitorDemo,它会在关闭时取消任务。 -
@trashgod。抱歉,我在
ProgressMonitorDemo中看不到这种情况。我正在查看文件ProgressMonitorDemo.java,我真的看不到它。 -
再看一遍。 @trashgod 说它取消任务是正确的。