java - 为什么我收到 actionPerformed() 错误 : unknown source?

标签 java swing

我正在从 HeadFirst Java 学习 Java。当我运行该应用程序时,它首先显示圆圈。但是当我单击按钮时,它会引发以下错误。下面是代码和错误:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI implements ActionListener {
JFrame frame;

public static void main(String[] args) {
    GUI g = new GUI();
    g.go();
}

private void go() {
    JFrame frame = new JFrame("Title");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton button = new JButton("Change Color");
    button.addActionListener(this);

    MyWidget my = new MyWidget();

    frame.getContentPane().add(BorderLayout.SOUTH, button);
    frame.getContentPane().add(BorderLayout.CENTER, my);
    frame.setSize(300, 300);
    frame.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent e) {
    frame.repaint();
}
}
class MyWidget extends JPanel {
@Override
public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    int red = (int) (Math.random() * 255);
    int green = (int) (Math.random() * 255);
    int blue = (int) (Math.random() * 255);
    Color startColor = new Color(red, green, blue);
    red = (int) (Math.random() * 255);
    green = (int) (Math.random() * 255);
    blue = (int) (Math.random() * 255);
    Color endColor = new Color(red, green, blue);
    GradientPaint gradient = new GradientPaint(70, 70, startColor, 150, 150, endColor);
    g2.setPaint(gradient);  
    g2.fillOval(70, 70, 100, 100);
}  
}

这是我在控制台上得到的内容:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at HeadFirstJava.GUI.actionPerformed(GUI.java:32)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)

最佳答案

当您第一次声明 JFrame 时,它​​不在范围内。更改此行:

JFrame frame = new JFrame("Title");

对此:

frame = new JFrame("Title");

关于java - 为什么我收到 actionPerformed() 错误 : unknown source?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32263446/

相关文章:

java - 使用批处理运行 Java + 库

java - Swing:延迟启用按钮

java - 无法将焦点转移到未显示的 CardLayout JPanel

java - 在jtextarea中显示连接的客户端

java - 替换 JScrollPane 中的 JTree 后出现奇怪的行为

java - JFrame 显示其自身内部内容的副本...?

java - 如何通过改造获得 gzip 压缩的 xml 文件?

java - ArrayList 数据结构如何同时进行索引和动态处理?它是如何实现的?

java - 如何在条形图 javafx 顶部显示条形图值

java - Java中final字段的继承?