Java 从另一个类更新swing组件

Java 从另一个类更新swing组件,java,swing,nullpointerexception,Java,Swing,Nullpointerexception,问题:无法从其他类更新swing组件 目标:当用户单击更新按钮时,“名称标签”中的文本将更改为“John Doe” 我尝试了stackoverflow关于这个问题的解决方案,但没有成功 这里有一个非常简单的例子,不确定我做错了什么 GUI.java package TestGUI.TestGUI; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.

问题:无法从其他类更新swing组件

目标:当用户单击更新按钮时,“名称标签”中的文本将更改为“John Doe”

我尝试了stackoverflow关于这个问题的解决方案,但没有成功

这里有一个非常简单的例子,不确定我做错了什么

GUI.java

package TestGUI.TestGUI;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI {

    JLabel nameLabel;
    JButton updateButton;
    JFrame frame;
    JPanel panel;

    public void display() {

        frame = new JFrame();
        panel = new JPanel(new BorderLayout()); 
        frame.setTitle("BlackJack Game");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);


        nameLabel = new JLabel("No Name");
        updateButton = new JButton("Update");

        panel.add(nameLabel,  BorderLayout.NORTH);
        panel.add(updateButton,  BorderLayout.SOUTH);

        updateButton.addActionListener(new EventListener());
    }

    public void setNameLabel(String name) {
        nameLabel.setText(name);
    }
}
EventListener.java

package TestGUI.TestGUI;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EventListener implements ActionListener {

    //private Card card;
    private GUI gui;

    public EventListener(GUI gui) {
        this.gui = gui;
    }

    public EventListener() {
        // TODO Auto-generated constructor stub
    }

    public void actionPerformed(ActionEvent actionEvent) {

        String actionCommand = actionEvent.getActionCommand();

        if(actionCommand.equals("Update")) {
            gui.setNameLabel("John Doe");
        }

    }
}
App.java

package TestGUI.TestGUI;

public class App 
{
    public static void main( String[] args )
    {
        GUI gui = new GUI();

        gui.display();
    }
}
单击“更新”按钮时,会产生以下错误


我已经看过你的代码了。有一件事需要修改以解决此问题

在这段代码中,您有一个updateButton,它按照您定义的EventListener类中指定的方式执行操作

在类GUI的inside display()方法中,您正在将操作侦听器添加到updateButton中,如下所示

 updateButton.addActionListener(new EventListener());
但是,在您定义的EventListener类中,此构造函数没有执行任何操作。您已经定义了另一个构造函数,它接受GUI类的对象,并用该类初始化类变量GUI。在actionPerformed()中,您正在同一gui对象上操作

因此,当您将EventListener()的对象添加到updateButton而不提供GUI类的对象时,EventListener类变量“GUI”在默认构造函数中保持未初始化状态,这就是当您单击update按钮时引发空指针异常的原因

因此,为了解决这个问题,需要在display()方法中传递希望更新的GUI类的引用。因此,如果您只是简单地进行此修改,它将按需要工作

updateButton.addActionListener(new EventListener(this));

我已经看过你的代码了。有一件事需要修改以解决此问题

在这段代码中,您有一个updateButton,它按照您定义的EventListener类中指定的方式执行操作

在类GUI的inside display()方法中,您正在将操作侦听器添加到updateButton中,如下所示

 updateButton.addActionListener(new EventListener());
但是,在您定义的EventListener类中,此构造函数没有执行任何操作。您已经定义了另一个构造函数,它接受GUI类的对象,并用该类初始化类变量GUI。在actionPerformed()中,您正在同一gui对象上操作

因此,当您将EventListener()的对象添加到updateButton而不提供GUI类的对象时,EventListener类变量“GUI”在默认构造函数中保持未初始化状态,这就是当您单击update按钮时引发空指针异常的原因

因此,为了解决这个问题,需要在display()方法中传递希望更新的GUI类的引用。因此,如果您只是简单地进行此修改,它将按需要工作

updateButton.addActionListener(new EventListener(this));

瞧&瞧&啊,真是个愚蠢的错误,谢谢!啊,真是个愚蠢的错误,谢谢!