# 问题描述
在对JDialog窗口进行演练的时候,代码执行的时候没有问题,
但是在我点击JDialog窗口里面的两个按钮时出现了下面的错误
```java
D:\JDK\JDK-8\bin\java.exe "-javaagent:D:\JetBrains\IntelliJ IDEA 2021.1\lib\idea_rt.jar=59625:D:\JetBrains\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\JDK\JDK-8\jre\lib\charsets.jar;D:\JDK\JDK-8\jre\lib\deploy.jar;D:\JDK\JDK-8\jre\lib\ext\access-bridge-64.jar;D:\JDK\JDK-8\jre\lib\ext\cldrdata.jar;D:\JDK\JDK-8\jre\lib\ext\dnsns.jar;D:\JDK\JDK-8\jre\lib\ext\jaccess.jar;D:\JDK\JDK-8\jre\lib\ext\jfxrt.jar;D:\JDK\JDK-8\jre\lib\ext\localedata.jar;D:\JDK\JDK-8\jre\lib\ext\nashorn.jar;D:\JDK\JDK-8\jre\lib\ext\sunec.jar;D:\JDK\JDK-8\jre\lib\ext\sunjce_provider.jar;D:\JDK\JDK-8\jre\lib\ext\sunmscapi.jar;D:\JDK\JDK-8\jre\lib\ext\sunpkcs11.jar;D:\JDK\JDK-8\jre\lib\ext\zipfs.jar;D:\JDK\JDK-8\jre\lib\javaws.jar;D:\JDK\JDK-8\jre\lib\jce.jar;D:\JDK\JDK-8\jre\lib\jfr.jar;D:\JDK\JDK-8\jre\lib\jfxswt.jar;D:\JDK\JDK-8\jre\lib\jsse.jar;D:\JDK\JDK-8\jre\lib\management-agent.jar;D:\JDK\JDK-8\jre\lib\plugin.jar;D:\JDK\JDK-8\jre\lib\resources.jar;D:\JDK\JDK-8\jre\lib\rt.jar;C:\Users\lenovo\IdeaProjects\out\production\java se" Swing.Example01
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1093)
at java.awt.Container.add(Container.java:1005)
at javax.swing.JDialog.addImpl(JDialog.java:921)
at java.awt.Container.add(Container.java:417)
at Swing.Example01$1.actionPerformed(Example01.java:40)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
代码如下
package Swing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Example01 {
public static void main(String[] args) {
//建立两个按钮
JButton btn1 = new JButton("模态对话框");
JButton btn2 = new JButton("非模态对话框");
JFrame f = new JFrame("DialogDemo");
f.setSize(300, 250);
f.setLocation(300,200);
//设置一个布局管理器
f.setLayout(new FlowLayout());
f.add(btn1);
f.add(btn2);
//设置一个单击关闭按钮默认关闭窗口
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
final JLabel label=new JLabel();
final JDialog dialog=new JDialog(f,"Dialog");
dialog.setSize(220,150);
dialog.setLocation(350,250);
dialog.setLayout(new FlowLayout());
final JButton btn3=new JButton("确定");
dialog.add(btn3);
//为模式对话框按钮添加单击事件
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//设置对话框为模态
dialog.setModal(true);
//如果JDialog窗口中没有添加了Lable标签,就把Lable标签加上
if(dialog.getComponents().length==1){
Component lable;
lable = null;
dialog.add(lable);
}
label.setText("模试对话框,点击确定按钮");
dialog.setVisible(true);
}
});
//为“非模态对话框”按钮添加点击事件
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//设置对话框为非模态
dialog.setModal(false);
//如果JDialog窗口中没有添加了Jlable标签,就把JLable标签加上
if(dialog.getComponents().length==1){
Component lable=null;
dialog.add(lable);
}
//否则修改标签内容
label.setText("非模式对话框,点击确定按钮关闭");
dialog.setVisible(true);
}
});
btn3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
}
});
}
}
