Java Swing JDialog bug?

Java Swing JDialog bug?,java,swing,jdialog,Java,Swing,Jdialog,我试图通过扩展JDialog类来创建自己的对话框 这是我用来启动的代码: import javax.swing.JDialog; public class ColorManager extends JDialog { private static final long serialVersionUID = 1L; public ColorManager(){ super(); this.setDefaultCloseOperation(JDia

我试图通过扩展JDialog类来创建自己的对话框 这是我用来启动的代码:

import javax.swing.JDialog;

public class ColorManager extends JDialog {
    private static final long serialVersionUID = 1L;

    public ColorManager(){
        super();
        this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        this.pack();
        this.setVisible(true);
    }
}
当我尝试运行代码时,它工作正常,但出现以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: defaultCloseOperation must be one of: DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE, or DISPOSE_ON_CLOSE
我读到WINDOWS\u EXIT或类似的东西有问题,但我传递的参数应该可以完成这项工作。 更奇怪的是,当我改变我的类,使它包含一个
JDialog
字段而不是扩展它时,它似乎工作得很好。 我请一位朋友在他的计算机上测试这个,代码没有抛出异常,他使用的是jre版本1.6.022,我使用的是1.6.022,我们都使用64位

那么我做错了什么?或者这是JRE中的一个bug

编辑:忘了提到,我正在使用eclipse

Edit2:我在Netbeans中尝试了相同的代码,效果很好,我的问题是什么???

在构造函数中调用的所有方法都应该在EDT线程上调用。不建议在构造函数内部执行此操作,但如果您坚持,请确保它在Swing(EDT)线程上运行,例如:

import javax.swing.JDialog;

public class ColorManager extends JDialog {
    private static final long serialVersionUID = 1L;

    public ColorManager(){
        super();
         SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                this.pack();
                this.setVisible(true);
             }
         });
    }
}
在我看来,实现这一点的最佳方法是将其移动到单独的方法中,然后在创建
ColorManager
实例后调用它

使用Swing时,应始终遵守Swing线程规则。有关更多信息,请访问


在构造函数中调用的所有方法都应该在EDT线程上调用。不建议在构造函数内部执行此操作,但如果您坚持,请确保它在Swing(EDT)线程上运行,例如:

import javax.swing.JDialog;

public class ColorManager extends JDialog {
    private static final long serialVersionUID = 1L;

    public ColorManager(){
        super();
         SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                this.pack();
                this.setVisible(true);
             }
         });
    }
}
在我看来,实现这一点的最佳方法是将其移动到单独的方法中,然后在创建
ColorManager
实例后调用它

使用Swing时,应始终遵守Swing线程规则。有关更多信息,请访问


以上所有的解决方案都很好,我在显示
JDialog
时也遇到了非常令人不安的时刻

在NETBEAN 8.2上,只需左键单击
JFrame
并选择properties,然后设置
defaultCloseOperation
属性。。。通常排在第一位

JDialog执行相同的操作


。。。无论如何,这是我自己的经验

以上所有的解决方案都很棒,我在展示
JDialog
时也有过非常令人不安的时刻

在NETBEAN 8.2上,只需左键单击
JFrame
并选择properties,然后设置
defaultCloseOperation
属性。。。通常排在第一位

JDialog执行相同的操作


。。。无论如何,这是我自己的经验

请包括异常的整个堆栈跟踪。根据我自己在程序中遇到的bug,这是Java中的bug的可能性很低。代码中存在bug的可能性非常高,数量级更高。我建议你创建并发布一个bug,这样我们就可以自己测试和修改代码了。同样,SSCCE将为您提供快速完整解决方案的最佳选择。好的,我想我发现了我做错了什么。我将代码粘贴到一个新项目中并对其进行了测试,同样的事情也发生了,然后我创建了一个创建对话框的主函数,它现在可以正常工作了。我想,当我尝试在没有main的情况下运行它,只是为了查看对话框时,它会尝试将其作为java Bean运行,而导致异常的原因我想,谢谢你的帮助,请包括异常的整个堆栈跟踪。根据我自己在程序中遇到的错误,这是java中的错误的可能性很低。代码中存在bug的可能性非常高,数量级更高。我建议你创建并发布一个bug,这样我们就可以自己测试和修改代码了。同样,SSCCE将为您提供快速完整解决方案的最佳选择。好的,我想我发现了我做错了什么。我将代码粘贴到一个新项目中并对其进行了测试,同样的事情也发生了,然后我创建了一个创建对话框的主函数,它现在可以正常工作了。我想,当我尝试在没有main的情况下运行它,只是为了查看对话框时,它会尝试将其作为javabean运行,我想这就是导致异常的原因,谢谢您的帮助