2011-02-08 2 views
0

Я пытаюсь сделать простой графический интерфейс, но в некоторых ошибках. Я хочу создать 3 простых кнопки и показать их бок о бок, длину экрана. Как мне это сделать?Не удается найти источник nullPointerException

Мой код до сих пор:

public static void main(String[] args) { 
    JFrame frame = new JFrame ("JFrame"); 
    JPanel panel = new JPanel(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JButton buttons[] = new JButton[2]; 
    for(int i = 0;i<=buttons.length ; i++){ 
    panel.add(buttons[i]); 
    } 
    frame.getContentPane().add(panel); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    } 
+0

что вы видите, когда вы шагаете через код в отладчике? –

+2

Это не источник вашей проблемы, но ваш цикл for должен быть 'for (int i = 0; i

ответ

4

Хм, если я помню, массивы объектов в Java инициализируются с нулевыми ссылками. Итак, в вашем случае вы добавляете нуль в панель.

Вы должны сделать это:

JButton buttons[] = new JButton[2]; 
for(int i = 0;i < buttons.length ; i++){ 
    buttons[i] = new JButton(/* whatever */); 
    panel.add(buttons[i]); 
} 

Затем снова возникает вопрос: зачем использовать массив кнопок, если вы можете просто добавить их, как вы их создания?

2

Сначала необходимо инициализировать кнопки в массиве. Вы можете сделать это, как в следующем примере.

JButton buttons[] = new JButton[2]; 
for(int i = 0; i < buttons.length; i++){ 
    buttons[i] = new JButton("" + i); 
} 
for(int i = 0; i < buttons.length; i++){ 
    panel.add(buttons[i]); 
} 

Проблема заключается в том, что все ваши кнопки инициализируются null изначально. А компоненты не позволяют добавить к ним null.

2

Вам необходимо инициализировать свои кнопки, прежде чем добавлять их в панель.

for(int i = 0;i<buttons.length ; i++){ 
    buttons[i] = new JButton(); 
    panel.add(buttons[i]); 
} 

Кроме того, принять к сведению изменения я сделал в цикл i < buttons.length вместо i <= buttons.length

Вот хороший маленький пример использования различных JButtons (here). Он включает добавление ImageIcons к кнопкам. т.е. кнопка ошибки.

URL imgURL = JButtonDemo.class.getResource("Error.jpg"); 
ImageIcon icon = new createImageIcon(imgURL); // should check that imgURL is not null 
buttons[0] = new JButton("Error!",icon); 

Это делает их немного более полезным, чем по умолчанию JButton

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