如何解决在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系统。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。