Domanda

I am trying to complete a project for school that involves putting 10 jlabels, 10 jtexts, and 10 jbuttons into a jpanel and the outputs of them into another jpanel. The problem is that I don't know how to use jpanels and I cannot figure out this issue I'm running into. I'm trying to add the jtexts and jlabels to the jpanel, but I keep getting this error:

Exception in thread "main" java.lang.NullPointerException
        at CP235_A8_Application_Fitzgerald.create_interface(CP235_A8_Application_Fitzgerald.java:89)
        at CP235_A8_Application_Fitzgerald.<init>(CP235_A8_Application_Fitzgerald.java:253)
        at CP235_A8_Application_Fitzgerald.main(CP235_A8_Application_Fitzgerald.java:263)

I found somewhere that it is because what I'm adding had a null value and that is what caused it, so i gave each one of my jtexts and jlabels before adding them to the jpanel, but that didn't work. I read something else about not instantiating the jpanel (but I didn't quite understand that so i'm not sure if that applies) Anyway I'm stumped would appreciate some help.

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

public class CP235_A8_Application_Fitzgerald extends JFrame
{

private JTextField text1;
private JLabel label1;
private JTextField text2;
private JLabel label2;
private JTextField text3;
private JLabel label3;
private JTextField text4;
private JLabel label4;
private JTextField text5;
private JLabel label5;
private JTextField text6;
private JLabel label6;
private JTextField text7;
private JLabel label7;
private JTextField text8;
private JLabel label8;
private JTextField text9;
private JLabel label9;
private JTextField text10;
private JLabel label10;

private JButton exit;
private JButton sort;
private JButton clear;
private JButton display;

private JPanel inputpane = new JPanel();

 private void create_interface()
 {
System.out.println("create_interface is running.");

int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
int i;
int j;

a = 15;
b = 10;
c = 18;
d = 7;
e = 25;
f = 2;
g = 14;
h = 27;
i = 33;
j = 11;

Container GUI = getContentPane();
GUI.setBackground(Color.red);

System.out.println("still running");

GUI.add(inputpane);
inputpane.setLayout(new BorderLayout());
inputpane.setBackground(Color.green);


System.out.println("still running");

//inputpane.add(sort, BorderLayout.SOUTH);
//inputpane.add(clear, BorderLayout.SOUTH);
//inputpane.add(exit, BorderLayout.SOUTH);
//inputpane.add(display, BorderLayout.SOUTH);

text1.setText(String.valueOf(a));
inputpane.add(text1, BorderLayout.EAST);
text2.setText(String.valueOf(b));
inputpane.add(text2, BorderLayout.EAST);
text3.setText(String.valueOf(c));
inputpane.add(text3, BorderLayout.EAST);
text4.setText(String.valueOf(d));
inputpane.add(text4, BorderLayout.EAST);
text5.setText(String.valueOf(e));
inputpane.add(text5, BorderLayout.EAST);
text6.setText(String.valueOf(f));
inputpane.add(text6, BorderLayout.EAST);
text7.setText(String.valueOf(g));
inputpane.add(text7, BorderLayout.EAST);
text8.setText(String.valueOf(h));
inputpane.add(text8, BorderLayout.EAST);
text9.setText(String.valueOf(i));
inputpane.add(text9, BorderLayout.EAST);
text10.setText(String.valueOf(j));
inputpane.add(text10, BorderLayout.EAST);
label1.setText("Integer 1");
inputpane.add(label1, BorderLayout.WEST);
label2.setText("Integer 2");
inputpane.add(label2, BorderLayout.WEST);
label3.setText("Integer 3");
inputpane.add(label3, BorderLayout.WEST);
label4.setText("Integer 4");
inputpane.add(label4, BorderLayout.WEST);
label5.setText("Integer 5");
inputpane.add(label5, BorderLayout.WEST);
label6.setText("Integer 6");
inputpane.add(label6, BorderLayout.WEST);
label7.setText("Integer 7");
inputpane.add(label7, BorderLayout.WEST);
label8.setText("Integer 8");
inputpane.add(label8, BorderLayout.WEST);
label9.setText("Integer 9");
inputpane.add(label9, BorderLayout.WEST);
label10.setText("Integer 10");
inputpane.add(label10, BorderLayout.WEST);

System.out.println("still running");
System.out.println("still running");
System.out.println("still running");


//exit.setBounds(650, 350, 300, 100);
//inputpane.add(exit);
exit.setText("EXIT NOW!");
exit.addActionListener(new ActionListener()
{   
    public void actionPerformed (ActionEvent event)
    {
        ExitButtonEventHandler(event);
    }
}
);


    /*
SP1.setBounds(220, 350, 300, 100);
GUI.add(SP1);
SP1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
area51.append("Type stuff here, pal!");
    */

setTitle("Display variables.");
setLocation(100, 100);
setSize(1200, 800);
setVisible(true);

System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);
System.out.println(h);
System.out.println(i);
System.out.println(j);


System.out.println("create_interface is ending.");
    }

    private void ExitButtonEventHandler(ActionEvent event)
    {
System.exit(0);
    }

    public CP235_A8_Application_Fitzgerald()
    {
System.out.println("Constructor is running.");

create_interface();

System.out.println("Constructor is running.");
    }


    public static void main(String[] args) 
    {
System.out.println("Hello from Assignment 2.");

CP235_A8_Application_Fitzgerald Peter = new CP235_A8_Application_Fitzgerald(); 

System.out.println("Goodbye from Assignment 2.");

    }

    /*
    private void DisplayListJButtonActionPerformed( ActionEvent event)
    {
int count = 0

RefillAL();

SortedListJTextArea.setText("");
SortedListJTextArea.append("Sorted Integer List\n");

for (IntegersArrayList ) 

if ( count == 0)
{
    SortedListJTextArea.append("No Integers to sort\n");
}

    }


    RefillAL()
    {
Integer i;
String str;

IntegersArrayList.clear();

str = text1.getText();
if ( ! str.equals(""))
{
    try
    {
        i = Integer.parseInt(str);
        IntegersArrayList.add(i);
    }
    catch (NumberFormatException exception)
    {

    }
 }
 */
     }

P.S.

As you can see a lot of the code is commented out and incomplete, I'm not too concerned with that at the moment, right now I'm focused on the JPanel not working (unless of course its part of the reason the jpanel is not working). Thanks in advance to whoever helps me out.

È stato utile?

Soluzione

You're declaring a mess of components but not initializing any of them before using them. You must initialize your variables, create WhatNot whatnot = new WhatNot() before trying to use the variable. Else you will be using null variables.

Or more specifically for your situation, you must assign a valid JTextField object to text1 and all the other text and label components before using them.

For example, change:

private JTextField text1;

to

// 10 just represents whatever column size you prefer
private JTextField text1 = new JTextField(10); 
// ...
// the same with all the other components. 

This has nothing to do with Swing and all to do with basic Java, and you will want to go through an introduction to Java text before trying to create GUI's as all of this is well explained in the first few chapters.


And as per my comment, You need to learn the general concepts of how to debug a NPE (NullPointerException). You should inspect the line carefully that throws it, find out which variable is null, and then trace back into your code to see why. You will run into these again and again, trust me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top