我正在开发一个具有以下功能的应用程序:
- 该应用程序将有一个“加载图像”按钮来打开图像和设置模式对话框。它将需要阻塞,直到该对话框返回,如果用户改变主意,则返回处理结果或 null。
- 图像和设置对话框将允许用户使用
JFileChooser
对话框选择图像并指定处理图像的详细程度。单击“加载”按钮将打开加载对话框。 - 加载对话框需要是定制设计的对话框,详细报告图像的耗时处理。如果用户允许处理完成,则需要关闭该对象并将其返回给原始对话框,该对话框需要关闭该对象并将该对象返回给应用程序。如果用户决定执行处理花费的时间太长,他可以取消加载,关闭加载对话框并返回到图像和设置对话框。
从概念上讲,这对我来说似乎并不难。然而,当我试图确定如何让它在 Swing 中工作时,不知何故我无法将它放在一起。根据我的阅读,GUI 组件需要在 Swing 的事件线程中实例化,因为它们中的许多都不是线程安全的。这些相同的组件需要阻止类似于(但不一样,因为我需要编写自定义组件)JOptionPane.showInputDialog()
方法的调用。但是这些调用需要在事件线程中实例化新组件,并等待事件线程中发生事件,然后再将值返回给应用程序。再加上我需要从对话框中弹出一个对话框,我感到很失落。
我已阅读有关对话框的 Java 教程以及 StackOverflow 和其他网站上的几篇文章,试图确定如何设计正确工作的类。不知何故,我根本不明白这是如何工作的(事件线程不是在第一次阻塞调用后进入睡眠状态吗?),以及如何编写我需要的自定义类来完成这项工作。坦率地说,我不确定我是否足够理解我的困惑,以至于我能够解释它。
有人可以解释一下模态对话框被实例化后的幕后情况吗?如何编写符合上述要求的对话框类?