gpt4 book ai didi

java - NullPointerException 在actionPerformed 方法中但不在main 中?

转载 作者:行者123 更新时间:2023-12-01 07:51:58 24 4
gpt4 key购买 nike

    public class DictionaryClient implements ActionListener {

JFrame frame = new JFrame("Amazing CW");
JPanel panel = new JPanel();
JButton button = new JButton("Send");
JTextField text = new JTextField("Field");
Book book;
DictionaryService port;

public DictionaryClient() {

panel.add(button);
panel.add(text);
frame.add(panel);
button.addActionListener(this);
frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

public static void main(String[] args){

DictionaryClient client = new DictionaryClient();
DictionaryServiceService service = new DictionaryServiceService();
DictionaryService port = service.getDictionaryServicePort();

Book book = port.sendBook();

}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button){
System.out.print(book.getAuthor() + " " + book.getTitle());
}
}
}

我理解 NullPointerException 是什么,但不明白当我移动

时,我的代码给了我这个错误
System.out.print(book.getAuthor() + " " + book.getTitle());

在 actionPerformed 之外,我完全没有遇到任何问题。

最佳答案

Book book = port.sendBook();

创建一个名为book的局部变量。它不会影响 DictionaryClient 类中的字段 book,该字段保留其默认值 null。将其更改为:

client.book = port.sendBook();

这会将值分配给 DictionaryClient 对象上的正确字段。

就像现在一样,一旦 main 方法结束并且局部变量超出范围,该值就会丢失。当您将 print 移到 main 方法中时,它能够引用局部变量,但在您的 actionPerformed 方法中,它是范围内唯一的 book是从未初始化过的字段。

关于java - NullPointerException 在actionPerformed 方法中但不在main 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35921710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com