在JDialog上摇摆wait和notify,对话框不显示其组件

问题描述

我有一个鼠标侦听器,当我在应用程序窗口中移动鼠标时会被调用。 在MouseEntered方法中,我这样调用ThreadB:

@Override
   public synchronized void mouseEntered(MouseEvent e) {

     ..

     ThreadB b = new ThreadB();
     b.start();
     System.out.println("Before Sync!!!!!!!");
     synchronized(b) {
         try{
         System.out.println("Waiting for b to complete...");
         b.wait();
     }catch(InterruptedException ex){
         ex.printStackTrace();
     }       
    }
    System.out.println("After Sync!!!!!!!");
}

class ThreadB extends Thread {
        
        @Override
        public void run(){
            synchronized(this){

                int dialogResult = JOptionPane.showConfirmDialog(null,"Loading process is in progress. Do you want to stop the process?","Loading Accounts",JOptionPane.YES_NO_OPTION);
                
              
            if (dialogResult == 0) {
                System.out.println("Yes is chosen!!!!");
            }else {
                System.out.println("No is chosen!!!!");
            }

                System.out.println("before NOTIFY!!!!!!!");
            
                notify();
         }
      }
   }

加载过程已按预期停止,但是对话框未绘制,这意味着它没有显示其组件。

非常感谢您的帮助。

非常感谢

致谢

解决方法

您无法在代码中的任何地方执行GUI事务,除非该代码在事件调度线程(EDT)中运行。您正在自己创建的线程上运行它;不允许。使用例如SwingUtilities.invokeLater或SwingWorker系统。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...