当用户关闭我的程序时,程序需要关闭一些可能需要一段时间才能关闭的后台进程。因此,我希望通过出现的消息框通知用户并通知用户,然后当后台进程全部完成时,消息框应该消失。
类似于此的一个示例是,当您关闭Eclipse时,将出现一个消息框,通知用户该环境正在与其他关闭进程一起保存。
我怎么能这样做?
答案 0 :(得分:6)
您可以add WindowListener到您的顶级JFrame,听取windowClosing事件,然后弹出一个对话框。在使对话框自行解散方面,您可能希望使用JProgressBar来通知用户剩余多少时间(请参阅此tutorial)。假设你正在使用SwingWorker,你可以让SwingWorker在完成处理时(在done方法内)调用JDialog的dispose方法。
答案 1 :(得分:1)
您可以使用ProgressBar
创建模态java.swing.JDialog
答案 2 :(得分:0)
它实际上比您想象的要容易。要捕获窗口关闭事件,您需要addWindowListener(WindowListener wl)
到相关的JFrame。然后,您可以在任何类中覆盖WindowClose方法,从而允许您相应地自定义功能。
我刚刚在link发现了这一点。
答案 3 :(得分:0)
尽管提出的解决方案非常简洁,但它们效率不高,因为只听主JFrame,您就没有机会将其用于其他结束机制(想想Alt+F4
,{ {1}}在命令行和其他人中。)
在我看来,最好注册shutdown hook,它们都显示消息对话框并执行关机操作。这样,无论用户选择何种方式关闭应用程序,都将正确执行所有关闭操作。