Java,如果actionPerformed()内的语句没有执行

use*_*500 0 java user-interface

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MyGUI extends JFrame implements ActionListener
{
    JButton btnA;
    public MyGUI()
    {
        setTitle("Test GUI");
        setSize(500, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
        setLayout(null);
        setLocationRelativeTo(null);

        JButton btnA=new JButton("A");
        btnA.setSize(100, 20);
        btnA.setLocation(0, 0);
        btnA.addActionListener(this);

        add(btnA);
    }

    public void actionPerformed(ActionEvent e)
    {
        System.out.println(e.toString());
        System.out.println("Action detected");
        if(e.getSource().equals(btnA))
            System.out.println("A was pressed");
    }
}
Run Code Online (Sandbox Code Playgroud)

我刚开始使用Java GUI.我有一个按钮.但是,当我单击该按钮时,第三个print语句不会执行,即使它应该是,从事件的toString()信息判断.它出什么问题了?

Ted*_*opp 8

执行此行时,您将声明一个局部变量:

JButton btnA=new JButton("A");
Run Code Online (Sandbox Code Playgroud)

成员字段btnA仍未初始化.将行更改为:

btnA=new JButton("A");
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,这是一个安全的案例 - 甚至更清楚地表达你的意图 - 使用==而不是打电话equals().)