LNORA 2022-04-17 20:09 采纳率: 50%
浏览 37

怎样解决在实现JDialog窗口按钮时报错?

# 问题描述

在对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();
            }
        });
    }
}

  • 写回答

1条回答 默认 最新

  • haikuokuangtu 2022-04-17 20:51
    关注

    空指针异常,添加空lable

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 4月17日