Java 为什么会出现actionPerformed()错误:未知源?

Java 为什么会出现actionPerformed()错误:未知源?,java,swing,Java,Swing,我正在从HeadFirstJava学习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 =

我正在从HeadFirstJava学习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");

首次声明JFrame时,它不在范围内。更改此行:

JFrame frame = new JFrame("Title");
为此:

frame = new JFrame("Title");

首次声明JFrame时,它不在范围内。更改此行:

JFrame frame = new JFrame("Title");
为此:

frame = new JFrame("Title");

首次声明JFrame时,它不在范围内。更改此行:

JFrame frame = new JFrame("Title");
为此:

frame = new JFrame("Title");

您正在阴影化
变量。将
frame
定义为类实例字段<代码>JFrame,但随后在
go
方法中声明一个局部变量<代码>JFrame=新JFrame(“标题”)。去除局部再加速<代码>框架=新的JFrame(“标题”)您正在阴影化
变量。将
frame
定义为类实例字段<代码>JFrame,但随后在
go
方法中声明一个局部变量<代码>JFrame=新JFrame(“标题”)。去除局部再加速<代码>框架=新的JFrame(“标题”)您正在阴影化
变量。将
frame
定义为类实例字段<代码>JFrame,但随后在
go
方法中声明一个局部变量<代码>JFrame=新JFrame(“标题”)。去除局部再加速<代码>框架=新的JFrame(“标题”)您正在阴影化
变量。将
frame
定义为类实例字段<代码>JFrame,但随后在
go
方法中声明一个局部变量<代码>JFrame=新JFrame(“标题”)。去除局部再加速<代码>框架=新的JFrame(“标题”)关了之后你怎么能回答?@Amila See:关了之后你怎么能回答?@Amila See:关了之后你怎么能回答?@Amila See:关了之后你怎么能回答?@Amila See: