Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing:如何禁止JFrame/JDialog之外的交互?_Java_Swing_Jframe_Jdialog - Fatal编程技术网

Java Swing:如何禁止JFrame/JDialog之外的交互?

Java Swing:如何禁止JFrame/JDialog之外的交互?,java,swing,jframe,jdialog,Java,Swing,Jframe,Jdialog,我想在执行线程时显示progressbar并阻止与我的应用程序框架的交互 在另一个线程中,有人建议使用JDialog代替JFrame和setModal(true)。但是,执行此操作时,对话框会阻止整个应用程序 这基本上是我的代码: MyDialog dlg = new MyDialog(); dlg.setModal(true); dlg.setVisible(true); //do some stuff.... //(never executed when setModal(

我想在执行线程时显示progressbar并阻止与我的应用程序框架的交互

在另一个线程中,有人建议使用JDialog代替JFrame和
setModal(true)
。但是,执行此操作时,对话框会阻止整个应用程序

这基本上是我的代码:

 MyDialog dlg = new MyDialog(); 
 dlg.setModal(true); 
 dlg.setVisible(true); 

 //do some stuff....
 //(never executed when setModal(true)

 dlg.setVisible(false); 

最简单的方法是使用JXLayer和LockableUI。 请举例说明如何做到这一点

还要注意的是,JXLayer将其制作成了Java7,并且可以作为


另一件事是,您不应该在站点事件调度线程中执行长时间运行的任务。阅读和。

这是模式对话框的要点,在“框”之外不会发生任何交互。模式弹出窗口在等待用户输入时也会停止线程。如果你想在显示对话框时做其他事情,你要么在对话框中做,要么启动一个新线程来处理


希望有帮助

使用模态对话框,尝试以下操作:

                final JDialog dlg = new JDialog();
                dlg.setModal(true);
                dlg.setSize(500, 500);
                dlg.addWindowListener(new WindowAdapter() {
                    @Override
                    public void windowActivated(WindowEvent e) { //or other method
                        new Thread(new Runnable() {
                            public void run() {
                                try {
                                    //execute your long running task
                                } //you should catch exception
                                finally {
                                    dlg.setVisible(false);
                                    dlg.dispose();
                                }
                            }
                        }).start();
                    }
                });
                dlg.setVisible(true);

我还可以在JFrame上设置GlassPane,它将拦截来自用户的任何事件。

确保在实现该对话框之前完成所有操作。