Java 如何使用动作侦听器处理帧?

Java 如何使用动作侦听器处理帧?,java,swing,nullpointerexception,jframe,actionlistener,Java,Swing,Nullpointerexception,Jframe,Actionlistener,我犯了一个错误,就像 import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; im

我犯了一个错误,就像

    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JTextField;

    public class login extends JFrame implements ActionListener {
        JTextField text1;
        JTextField text2;
        JButton button3;
        JButton button4;
        JButton button5;
        JFrame frame5;
        String username;
        String password;
        String a;
        login(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new FlowLayout());
    
        text1 = new JTextField();
        text1.setPreferredSize(new Dimension(250,50));
        text1.setFont(new Font("MV Boli",Font.PLAIN,15));
        
        button3 = new JButton("UserName");
        button3.setFont(new Font("MV Boli",Font.PLAIN,15));
            
        text2 = new JTextField();
        text2.setPreferredSize(new Dimension(250,50));
        text2.setFont(new Font("MV Boli",Font.PLAIN,15));
        
        button4 = new JButton("PassWord");
        button4.setFont(new Font("MV Boli",Font.PLAIN,15));
        button5 = new JButton("Submit");
        button5.setFont(new Font("MV Boli",Font.PLAIN,15));
        button5.addActionListener(this);
    
        this.add(button3);
        this.add(text1);
        this.add(button4);
        this.add(text2);
        this.add(button5);
        this.setSize(400,500);
        this.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stu
        if(e.getSource()==button5) {
            
            frame5.dispose();
            username = text1.getText();
            password = text2.getText();         
        }       
    }       
}
我只想在打开下一帧时通过调用动作侦听器中的新方法来关闭当前帧,但我无法处理它

我还想从get text方法继承username和password的值,并在另一个类中使用它们,通过与MySQL数据库建立JDBC连接来验证username和password。如果我在尝试打印新类中的username、password的值时继承了该类,则得到的输出为
null
null
实际上正在输出屏幕上打印。请告诉我如何通过处理当前帧在另一个类中继承这些值

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at login.actionPerformed(login.java:61)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6636)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6401)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2764)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
导致此异常的行是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at login.actionPerformed(login.java:61) at 
frame5
字段从未分配,因此
null
字段也从未分配

最快的修复方法是更改行
frame5.dispose()
dispose()。建议避免不必要地扩展类。因此,更好的方法是删除
扩展JFrame

    frame5.dispose();

this.
应该被构造函数末尾的
frame5.
替换。)

您会得到
NullPointerException
,因为frame5从未初始化,它是空的。事实上,你并不需要它。尝试<代码>此。处理()/代码>或简单地<代码>处理()/代码>。当发布问题或答案时,考虑添加代码的最小示例(见1)。参见和2)在这个特定的情况下,在模式
JDialog
JOptionPane
中询问登录详细信息,并在设置选项窗格或对话框可见后立即在行中获取详细信息。3) 你似乎误解了“继承”的含义。该标签已被删除。。。。4) 请学习常见的Java命名法(命名约定-例如
EachWordUpperCaseClass
firstWordLowerCaseMethod()
firstWordLowerCaseAttribute
,除非它是
大写常量
),并一致使用它。5) 有关密码,请使用
JPassWordField
。6) 见(是的)。。7) 除非必要,否则不要扩展(实际继承)窗口(如
JFrame
)或容器或组件。这里没有理由这么做。请阅读我留下的评论并运行我链接的mre。它显示了@TomHawtin-tackline解释的解决方案。还可以看到我写了大量(好吧,7)的评论,包括没有使用框架,但是当使用多个框架时,
.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)将导致进一步的问题(即当帧消失时退出JRE)。
    JFrame frame5 = new JFrame();