Java 禁用ProgressMonitor的对话框关闭

Java 禁用ProgressMonitor的对话框关闭,java,swing,Java,Swing,我和斯温一起工作 这为我生成了一个漂亮的对话框: 老实说,我认为ProgressMonitor的设计有一个缺陷:如果用户按下红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台做的任何工作当然都会继续。没办法把对话框拿回来,好吗 关闭窗口应该意味着“取消”或者根本不允许,因为我需要用户等待任务完成或者取消它。我如何实现这两个目标 如果我能得到对JDialog的引用,那么我可以: dialog.setDefaultCloseOperation(JDialog.

我和斯温一起工作

这为我生成了一个漂亮的对话框:

老实说,我认为
ProgressMonitor
的设计有一个缺陷:如果用户按下红/白十字关闭对话框,您认为会发生什么?是的,你猜对了:它只是关闭/隐藏对话框,你在后台做的任何工作当然都会继续。没办法把对话框拿回来,好吗

关闭窗口应该意味着“取消”或者根本不允许,因为我需要用户等待任务完成或者取消它。我如何实现这两个目标

如果我能得到对JDialog的引用,那么我可以:

dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
但我找不到那个参考资料

更新和最终答案

所以,我没有告诉你全部的故事。事实上,我使用的当然是在封面下使用的,所以我认为这对手头的案子来说并不重要。但确实如此

Andrew说得对,
ProgressMonitor
在对话框关闭时设置标志。这可以通过查看JDK源代码来验证。但为了捕捉该事件,您需要一个
PropertyChangeListener
。使用
ProgressMonitorInputStream
时,您可能不会有一个(像我一样),因为更新
ProgressMonitor
都是由
ProgressMonitorInputStream
负责的,所以您不必自己做这部分。我的假设是,
ProgressMonitorInputStream
的理由是不必做样板代码


我不得不说,与DIY方法相比,我发现使用
ProgressMonitorInputStream的好处非常小,甚至是负面的。

检查,确实如此。

我在发布问题后才看到。我想这有点关联。据我所知,ProgressMonitors根本不适用于您想要完全控制的任务。您可以看看,它会在关闭时取消任务。@trashgood。很抱歉,我看不出
ProgressMonitorDemo
中有这种情况。我正在查看文件
ProgressMonitorDemo.java
,但我确实看不到它。请再看一次@垃圾神说它取消任务是正确的。对,
JOptionPane
有一个
windowClosing()
处理程序;你也可以看到工人财产的变化。谢谢安德鲁和垃圾神。我已经用最终结论更新了我的帖子。