我正在尝试通过扩展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_EXIT
或类似的问题,但我通过的参数应该做的工作。使它更奇怪的是,当我改变我的类,所以它将包含一个JDialog
字段而不是扩展它,它似乎工作得很好。我让一个朋友在他的计算机上测试这个并且代码没有抛出异常,他正在使用jre版本1.6.022而我正在使用1.6.022我们两个都使用64位。
那我做错了什么?或者这是JRE中的错误?
编辑:忘了提,我正在使用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);
}
});
}
}
IMO实现它的最佳方法是将其移动到单独的方法中,然后在创建qazxsw poi实例后调用它。
使用Swing时,您应始终遵守Swing线程规则。更多信息可以在
ColorManager
所有上述解决方案都很棒,我也有非常令人不安的时刻与http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html展示。
在NETBEAN 8.2上只需左键单击JDialog
并选择属性,然后设置JFrame
属性...通常是列表中的第一个,
为defaultCloseOperation
做同样的事情
......无论如何,这是我自己的经历