저는 컴퓨터 사이언스 프로젝트를위한 주기율표를 만드는 중입니다. 단추 배열을 만드는 코드를 작성하려고합니다. 이 버튼의 텍스트는 다른 배열의 해당 요소에 해당하는 버튼의 이름을 검색하여 결정됩니다. 이 작업이 완료되면 해당 요소의 유형에 따라 버튼이 그에 따라 색상이 지정됩니다. 프로그램은 정상적으로 컴파일되지만 실행되지 않습니다. 여기 내 코드는 다음과 같습니다JButton에 텍스트를 설정하려고 할 때 java.lang.NullPointerException이 발생했습니다.
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)
어떤 제안 ??
감사를 만들! 배열의 각 버튼을 새 버튼으로 초기화하는 루프를 만들었고 모든 것이 잘 작동했습니다. – user3718716