Java 为什么我得到一个NullPointerException,却没有显示我添加的组件?

Java 为什么我得到一个NullPointerException,却没有显示我添加的组件?,java,nullpointerexception,Java,Nullpointerexception,下面,您将看到我收到的错误消息。输出仅显示JFrame,不显示任何内容 线程“main”java.lang.NullPointerException中的异常 位于java.awt.Container.addImpl(Container.java:1043) 在java.awt.Container.add处(Container.java:363) 在gui上。(gui.java:37) 位于gui.main(gui.java:15) Java结果:1 代码如下: import javax.swi

下面,您将看到我收到的错误消息。输出仅显示
JFrame
,不显示任何内容

线程“main”java.lang.NullPointerException中的异常 位于java.awt.Container.addImpl(Container.java:1043) 在java.awt.Container.add处(Container.java:363) 在gui上。(gui.java:37) 位于gui.main(gui.java:15) Java结果:1 代码如下:

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

public class gui extends JFrame {
    JPanel p1;
    JTextField tf1,tf2,tf3,tf4;
    JLabel lbl1,lbl2,lbl3,lbl5,lbl6,lbl7,lbl8,lbl9,lbl10;
    JTextArea txtMessage;
    JButton b1,b2,b3,b4,b5;

    public static void main(String [] args) {
        gui f = new gui();
        f.setTitle("RSA.");
        f.setVisible(true);
        f.setSize(700,500);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public gui() {
        lbl1 = new JLabel("Enter first prime number : ");
        lbl2 = new JLabel("Enter second prime number: ");
        lbl3 = new JLabel("Enter the message to be send : ");
        tf1 = new JTextField(15);
        tf2 = new JTextField(15);
        txtMessage = new JTextArea("Please enter",5,20);
        p1 = new JPanel();
        p1.add(lbl1);
        p1.add(tf1);
        p1.add(lbl2);
        p1.add(tf2);
        p1.add(lbl3);
        p1.add(txtMessage);

    p1.setLayout(new GridLayout(3,2));
    p1.add(lbl1);
    p1.add(tf1);
    p1.add(lbl2);
    p1.add(tf2);
    p1.add(lbl3);
    p1.add(txtMessage);
    }
}
我会感谢那些给我解决方案的人。谢谢 编辑后,输出如下图所示:
lbl3
从未设置为除
null
以外的值,您可以设置
lbl2
两次:

lbl2=new JLabel("Enter second prime number: ");
lbl2=new JLabel("Enter the message to be send : ");
换成

lbl2=new JLabel("Enter second prime number: ");
lbl3=new JLabel("Enter the message to be send : ");

您没有在
gui
的构造函数中初始化
lbl3
。我猜这是一个输入错误-您有两行代码初始化lbl2:

lbl2=new JLabel("Enter second prime number: ");
lbl2=new JLabel("Enter the message to be send : ");
只需将第二个更改为
lbl3
,您就可以:

lbl2=new JLabel("Enter second prime number: ");
lbl3=new JLabel("Enter the message to be send : "); // here

您需要在构造函数中添加此行:

this.add(p1);

命名您的类
Gui
Gui
,而不是
Gui
。。。或者更好:
RSAEncryptionFrame
…可以工作,但只显示没有内容的窗口。我添加到JPanel并设置为border的组件nothing.work,但只显示没有内容的窗口。我添加到JPanel并设置为border work Nothing的组件实际上需要添加到
gui
方法中,因为
p1
直到该方法完成一半才构建。您运行了它吗?我确实这样做了,但可能是我意外地切换了其他东西。实际上,nvm,
gui
是构造函数。(这个名字欺骗了我。)