2013-08-11 5 views
2

내 프로그램을 더 짧게 만들려면 배열 및 루프를 사용하여 작업을 수행하고 있지만 문제가 있습니다. 배열을 잘못 초기화했는지 아니면 잘못 액세스했는지 확실하지 않습니다. 40 개의 JCheckBoxes 배열을 초기화하고 있습니다. JCheckBox에의 항목 상태가 seatChecker() 방법을 변경 될 때마다JCheckBox 배열 초기화 또는 액세스 문제

JCheckBox[] seatz={chk_a1,chk_a2,chk_a3,chk_a4,chk_a5,chk_a6,chk_a7,chk_a8,chk_a9,chk_a10,chk_b1,chk_b2...chk_d10}; 

은 다른 사람을 가능하게

public void seatChecker(JCheckBox chkbox) { 
    if(chkbox.isSelected()){ 
     chkboxcount=chkboxcount+1; 
    } else { 
     chkboxcount=chkboxcount-1; 
    } 
    if(chkboxcount>=totalseats){ 
     disableSeats(); 
    } else { 
     enableSeats(); 
    } 
} 

여기 카운트가 일정 수준에 도달하면 나는 JCheckBoxes을 disableing하고

라고합니다. 두 가지 방법에 대한 코드는

public void disableSeats() { 
    for(int x = 0; x < 40 ; x++) { 
     if(seatz[x].isSelected()==false){ 
      seatz[x].setEnabled(false); 
     } 
    } 
} 

public void enableSeats() { 
    for(int x = 0; x < 40 ; x++) { 
     seatz[x].setEnabled(true); 
    } 
} 

는 내가 이상 여기에 잘못 뭐하는 거지 if(seatz[x].isSelected()==false)seatz[x].setEnabled(true)에서 오류 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 무엇입니까입니까?

답변

5

당신의 상태 :

내가 여기 위에 잘못하고있는 무슨 if(seatz[x].isSelected()==false)seatz[x].setEnabled(true)에서 오류 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException는 무엇입니까?

이는 seatz [x]가 null 인 경우에만 발생할 수 있습니다.

참조 유형의 배열 (여기서는 JCheckBox)을 선언하고 있지만 각 배열 항목을 사용하기 전에 유효한 null이 아닌 객체를 아직 구성하지 않았습니다. 먼저 배열을 사용하려고 시도하기 전에 유효하지 않은 유효한 객체에 대한 참조로 배열을 채워야합니다. 이는 참조 유형의 배열에 대해 동일합니다.

다른 방법으로는 개체 배열을 만들 때 달걀 상자를 만드는 것과 같습니다. 먼저 카톤에 넣기 전까지는 알을 사용할 수 없습니다. 배열을 초기화하기 전에 배열의 어떤 객체도 사용할 수 없으며 종종 for 루프 내에서 수행됩니다.

즉이 먼저 수행해야합니다

for (int i = 0; i < myReferenceArray.length; i++) { 
    myReferenceArray[i] = new MyReference(); 
} 

당신이 배열의 모든 항목을 사용하기 전에. 이보고에 제쳐두고로서


:

은 I와 같은 40 JCheckBoxes의 어레이를 초기화하고있다.

JTable이 사용자의 요구 사항을 충족시키는 지 궁금합니다.


주 당신이 JTable가,이 코드를 사용할 수없는 경우 :

JCheckBox[] seatz={chk_a1,chk_a2,chk_a3,chk_a4,chk_a5,chk_a6,chk_a7,chk_a8,chk_a9,chk_a10,chk_b1,chk_b2...chk_d10}; 

쉽게 변경 될 수 있습니다 :

JCheckBox[][] seats = new JCheckBox[4][10]; // magic numbers replaced by constants 
for (int row = 0; row < seats.length; row++) { 
    for (int col = 0; col < seats[row].length; col++) { 
    seats[row][col] = new Seat(); 
    seatPanel.add(seats[row][col]); 
    } 
} 
+1

너무 빠르고 정확한 :-) –

+1

@ JunedAhsan : 감사합니다. –

+1

@ Juned Ahsan은 좌석 용 JToggleButton을 사용합니다. – mKorbel