2014-06-08 2 views
-1

저는 컴퓨터 사이언스 프로젝트를위한 주기율표를 만드는 중입니다. 단추 배열을 만드는 코드를 작성하려고합니다. 이 버튼의 텍스트는 다른 배열의 해당 요소에 해당하는 버튼의 이름을 검색하여 결정됩니다. 이 작업이 완료되면 해당 요소의 유형에 따라 버튼이 그에 따라 색상이 지정됩니다. 프로그램은 정상적으로 컴파일되지만 실행되지 않습니다. 여기 내 코드는 다음과 같습니다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) 

어떤 제안 ??

답변

1
JButton[] buttonArray = new JButton[40]; 

이렇게하면 각 요소가 null임을 의미하는 단추의 빈 배열이 만들어집니다. 먼저 각 요소를 new JButton()과 같은 것으로 설정하여 배열을 채우고 해당 속성을 설정해야합니다.

+0

감사를 만들! 배열의 각 버튼을 새 버튼으로 초기화하는 루프를 만들었고 모든 것이 잘 작동했습니다. – user3718716

1

당신이 원하는 :

JButton[i] = new JButton(); 

이 코드는 배열의 새로운 JButton를 JButton[i]

관련 문제