2012-02-23 3 views
0

Так что я получаю исключение NullPointerException в Container.add, поэтому я, очевидно, не вижу чего-то, чего я просто не вижу. ArrayList принадлежит Cell, который расширяет JButton. Метод init() находится в расширенном классе JPanel. Это мой вопрос, так что будьте жесткими в вопросительном формате, если я делаю это неправильно, спасибо.Java: JButton и ArrayList: добавление в JPanel из ArrayList

public void init() { 
    int k = cells.length/2; 
    for (int i = 0; i < (cells.length/2); i++) { 
     int ID = rand.nextInt(25); 
     cells[i] = new Cell(this, ID); 
     cells[i + k] = new Cell(this, ID); 
     k--; 
     cellList.add(cells[i]); 
     cellList.add(cells[i + k]); 
    } 

    Collections.shuffle(cellList); 

    for (Cell cell : cellList) { 
     add(cell); 
    } 
} 
+1

Кроме того, что-то, что я заметил, заключается в том, что люди, похоже, больше не используют отладчики в настоящее время? Я имею в виду, что это была очевидная ошибка, которую легко можно наблюдать после долгих часов перед экраном, но отладка кода могла бы сразу выявить ошибку. Поэтому, пожалуйста, узнайте об отладчиках и о том, как их использовать. – stryba

+0

Вы правы. Я новичок в программировании и часто забываю об отладчике. Я больше знаком с NetBeans и теперь это отладчик. – Martin8768

ответ

3

Простой и простой не k-- перед тем cellList.add(cells[i+k])

Даже если я не вижу, что делаете с массивом в любом случае.

1

Что, если cells.length нечетно (не divisionable на 2, как 3, 5, 7, 15)

Рассмотрим, что cells.length=5, то k=2 и клетки [4] останется нулевым.

+1

действительная точка, но не имеет значения, так как он не добавит 'cells [4]' to 'cellList' – stryba

0

Вы осуждаете k, прежде чем добавлять ячейки [i + k] в cellList. В результате ячейки [i + k] еще не инициализированы. Попробуйте изменить его на:

cellList.add(cells[i]); 
    cellList.add(cells[i + k]); 
    k--; 
+0

где разница в коде OP, опубликованном? – stryba

+0

Упс, пытался выгнать быстрый ответ, прежде чем я ушел с работы и забыл изменить исходный код после того, как я скопировал и вставил. Извините за это, отредактируйте ответ. –

Смежные вопросы