Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下为什么我';我在Java中遇到了这个错误?_Java_Swing - Fatal编程技术网

有人能解释一下为什么我';我在Java中遇到了这个错误?

有人能解释一下为什么我';我在Java中遇到了这个错误?,java,swing,Java,Swing,考试班 import javax.swing.*; public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new A_test(); } });

考试班

import javax.swing.*;

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {                
            public void run() {
                new A_test();
            }
        });
    }
}
我使用A_测试类来创建一个带有标签和按钮的JFrame。当我按下按钮时,我希望应用程序将标签的文本从以前更改为“test”。

此处

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

public class A_test implements ActionListener {

    private JFrame jf;

    public A_test() {
        JFrame jf = new JFrame("A simple swing Program");
        jf.setSize(275,100);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel jl = new JLabel("Swing powers the modern JAVA GUI");
        jf.getContentPane().add(jl);
        this.addButton();
        jf.setVisible(true);
    }

    public void addButton() {
        JButton jb = new JButton("Submit");
        jf.getContentPane().add(jb);
        jb.addActionListener(this);
        jf.getContentPane().add(jb);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        ((JLabel) jf.getContentPane().getComponent(0)).setText("test");
    }    
}
您正在创建一个新的JFrame,而不是将私有实例变量分配给一个新的JFrame。 当您到达此点时:

JFrame jf = new JFrame("A simple swing Program");
jf.setSize(275,100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jl = new JLabel("Swing powers the modern JAVA GUI");
jf.getContentPane().add(jl);
this.addButton();
jf.setVisible(true);
jf
仍然为空

只要这样做:

  JButton jb = new JButton("Submit");
jf.getContentPane().add(jb);
jb.addActionListener(this);
jf.getContentPane().add(jb);
这里

您正在创建一个新的JFrame,而不是将私有实例变量分配给一个新的JFrame。 当您到达此点时:

JFrame jf = new JFrame("A simple swing Program");
jf.setSize(275,100);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jl = new JLabel("Swing powers the modern JAVA GUI");
jf.getContentPane().add(jl);
this.addButton();
jf.setVisible(true);
jf
仍然为空

只要这样做:

  JButton jb = new JButton("Submit");
jf.getContentPane().add(jb);
jb.addActionListener(this);
jf.getContentPane().add(jb);

您有两个jf实例。其中一个是该类的成员,未初始化。另一个是初始化的构造函数中的局部变量。因此,当调用addButton时,您试图访问成员变量,该变量为null,因此为NullPointerException。

您有两个jf实例。其中一个是该类的成员,未初始化。另一个是初始化的构造函数中的局部变量。因此,当调用addButton时,您正试图访问成员变量,该变量为null,因此为NullPointerException。

您应该开始使用Eclipse或netbeans之类的编辑器,并注意警告。他们会确切地告诉您出了什么问题(您的变量隐藏了一个成员变量)


Java给出了令人敬畏的警告——Java的“挑剔”使许多人认为该语言更“困难”,但实际上它使它更容易。从长远来看,语法松散的语言确实要困难得多。

您应该开始使用Eclipse或netbeans之类的编辑器,并注意警告。他们会确切地告诉您出了什么问题(您的变量隐藏了一个成员变量)

Java给出了令人敬畏的警告——Java的“挑剔”使许多人认为该语言更“困难”,但实际上它使它更容易。从长远来看,语法松散的语言要困难得多。

@Tudor jf.getContentPane().add(jb)@Tudor jf.getContentPane().add(jb);