java.lang.NullPointerException при попытке установить текст в JButton
Я работаю над созданием периодической таблицы для проекта компьютерной науки. Я пытаюсь написать код, который создает массив кнопок. Текст этих кнопок определяется путем извлечения имени соответствующего элемента в моем другом массиве. После того, как это будет завершено, в зависимости от того, какой тип элемента он есть, кнопка окрашивается соответствующим образом. Программа компилируется отлично, но она не запускается. Вот мой код:
BufferedReader reader = null;
ElementsTest[] element = new ElementsTest[40];
try {
File file = new File("Elements 41-80.txt");
reader = new BufferedReader(new FileReader(file));
for (int counter = 0 ; counter < 40 ; counter++)
{
String name = reader.readLine();
int atomicNum = counter + 1;
String atomicWeight = reader.readLine();
String elementSymbol = reader.readLine();
String elementCharge = reader.readLine();
String fullElectronConfig = reader.readLine();
String shortElectronConfig = reader.readLine();
String elementState = reader.readLine();
String elementType = reader.readLine();
String density = reader.readLine();
String meltingPoint = reader.readLine();
String boilingPoint = reader.readLine();
String emptyLine = reader.readLine();
element[counter] = new ElementsTest (name, atomicNum, atomicWeight, elementSymbol, elementCharge, fullElectronConfig, shortElectronConfig, elementState, elementType, density, meltingPoint, boilingPoint);
}
} catch (IOException e) {
e.printStackTrace();
}
JButton[] buttonArray = new JButton[40];
for (int counter2 = 0 ; counter2 < 40 ; counter2++)
{
String currentSymbol = element[counter2].getElementSymbol();
buttonArray[counter2].setText(currentSymbol);
if (element[counter2].getElementType().equals("Metal"))
{
buttonArray[counter2].setBackground(Color.ORANGE);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Non-Metal"))
{
buttonArray[counter2].setBackground(Color.GRAY);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Noble Gas"))
{
buttonArray[counter2].setBackground(Color.BLACK);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Transition Metal"))
{
buttonArray[counter2].setBackground(Color.GREEN);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Lanthanide"))
{
buttonArray[counter2].setBackground(Color.YELLOW);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Alkali Metal"))
{
buttonArray[counter2].setBackground(Color.RED);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Alkaline Earth Metal"))
{
buttonArray[counter2].setBackground(Color.BLUE);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
if (element[counter2].getElementType().equals("Halogen"))
{
buttonArray[counter2].setBackground(Color.MAGENTA);
buttonArray[counter2].setOpaque(true);
buttonArray[counter2].setBorderPainted(false);
}
else {
buttonArray[counter2].setOpaque(true);
}
}
После нажатия кнопки RUN я получаю эту ошибку:
java.lang.NullPointerException
at TestLayout.main(TestLayout.java:136)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Какие-либо предложения??
Вы хотите:
JButton[i] = new JButton();
этот код создает новую jButton массива JButton[i]
JButton[] buttonArray = new JButton[40];
Это создает пустой массив кнопок, что означает, что каждый элемент имеет значение null
. Сначала вам нужно заполнить массив, установив каждый элемент на что-то вроде new JButton()
а затем задайте его свойства.