2014-09-18 1 views
3

Я пытаюсь справиться с java swing и тестировал переключатели. Мой код:java swing radio buttons - java.lang.NullPointerException

import java.awt.*; 
import javax.swing.*; 
import javax.swing.ButtonGroup; 

public class Scafhome extends javax.swing.JFrame { 

    private JRadioButton bandButton; 
    private JRadioButton gelButton; 
    private JButton jbtnRun; 

    public Scafhome() { 
     JFrame jfrm = new JFrame("Scaffold search ..."); 
     jfrm.setLayout (new GridLayout(8,2)); 
     jfrm.setSize(320,220); 
     jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JRadioButton bandButton = new JRadioButton(); 
     bandButton.setText("Band-id"); 
     bandButton.setSelected(true); 

     JRadioButton gelButton = new JRadioButton(); 
     gelButton.setText("Gelc-ms"); 

     ButtonGroup group = new ButtonGroup(); 
     group.add(bandButton); 
     group.add(gelButton); 

     JButton jbtnRun = new JButton("RUN"); 


     jbtnRun.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       RunActionPerformed(evt); 
      } 
     }); 


     jfrm.add(bandButton); 
     jfrm.add(gelButton); 
     jfrm.add(jbtnRun); 

     jfrm.setVisible(true); 

    } 


    private void RunActionPerformed(java.awt.event.ActionEvent evt) { 

     String radioText=""; 
     if (bandButton.isSelected()) { 
      radioText=bandButton.getText(); 
     } 

     if (gelButton.isSelected()) { 
      radioText=gelButton.getText(); 
     } 

     javax.swing.JOptionPane.showMessageDialog(Scafhome.this, radioText); 

    } 


    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new Scafhome(); 
      } 
     }); 
    } 

} 

К сожалению, я получаю следующее сообщение об ошибке:

Исключение в потоке "АВТ-EventQueue-0" java.lang.NullPointerException на Scafhome.RunActionPerformed (Scafhome.java: 50)

Это на: "если (bandButton.isSelected()) {"

Я думал, «ба ndButton 'был создан и отмечен как «выбранный» - или я что-то не понял?

Большое спасибо, Curly.

+0

Хотя это (исключение NullPointerException) является общей проблемой, и его просят до смерти на этом сайте, ваш вопрос хорошо представлен, так как он короткий, полный, полностью описывает вашу ошибку и показывает очень маленькую компилируемую исполняемую программу, которая просто демонстрирует проблемы и ничего другого и позволяет легко воспроизвести проблему. Хороший первый вопрос. –

ответ

8

Вы затеняете переменную bandButton - вы повторно объявляете ее в конструкторе и инициализируете локальную переменную, но не поле класса, оставляющее поле класса null. Решение - не повторно объявляйте переменную.

Чтобы быть явным, это изменить:

public class Scafhome extends javax.swing.JFrame { 

    private JRadioButton bandButton; 
    //... 

    public Scafhome() { 
     //... 

     // re-declared variable! 
     JRadioButton bandButton = new JRadioButton(); 

к этому:

public class Scafhome extends javax.swing.JFrame { 

    private JRadioButton bandButton; 
    //... 

    public Scafhome() { 
     //... 

     // variable not re-declared  
     bandButton = new JRadioButton(); 

Обратите внимание, что вы делаете это для всех трех переменных, которые вы объявили в классе.

+0

Большое спасибо за чистое объяснение на воздушной подушке! – curly

+0

@curly: добро пожаловать! Будьте в поиске затененных переменных, потому что вы можете столкнуться с ними снова. Вы часто можете настроить свою среду IDE, чтобы предупредить вас, если/когда это происходит. –

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

  • Нет связанных вопросов^_^