JDialog在'dispose'执行之前不显示

时间:2016-07-18 16:24:16

标签: java joptionpane

我正在尝试创建一个在关闭之前保持打开的JDialog,并且不允许用户关闭它。

import java.awt.Dialog.ModalityType;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class MessageClass {

    private JDialog waitDialog;

    public MessageClass(String string_,String title_) {

        JOptionPane msg=new JOptionPane(string_,
            JOptionPane.INFORMATION_MESSAGE,
            JOptionPane.DEFAULT_OPTION,null,new Object[]{},null);
        waitDialog=msg.createDialog(title_);
    }

    public void openWait() {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                waitMessage();
            }
        });
    }

    private void waitMessage() {
        waitDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        waitDialog.setLocationRelativeTo(GUI.getInstance().frame);
        waitDialog.setModalityType(ModalityType.DOCUMENT_MODAL);
        waitDialog.pack();
        waitDialog.setVisible(true);
    }

    public void closeWait() {
        waitDialog.dispose();
    }

}

这个课我有3个问题,我无法理解。第一个是在调用dispose之前不会显示窗格。第二个是它不会处理可能与第一个问题相关的问题(我没有尝试过两次调用dispose)。第三个是窗格不显示文本,而是空白。

我像这样设置了这个类:

MessageClass msg=new MessageClass("Information text","Title");
msg.openWait();
// a bunch of code
msg.closeWait();

有人能发现我做错了吗? TIA。

1 个答案:

答案 0 :(得分:0)

你在哪里运行openWait()和closeWait()?如果它们在EventDispatchThread上,则阻塞该线程,直到closeWait()完成执行,因此对话框没有机会绘制自己。

相关问题