2010-08-06 2 views
0

Рассмотрим следующий кодGettext() Исключение нулевого указателя

public class sqldetails extends JFrame implements ActionListener{ 

static String username=null; 
static String password=null; 
JButton button; 
JTextField utext,ptext; 

public static void main(String[] args){ 
new sqldetails(); 
} 

sqldetails() { 
    this.setTitle("Sql details"); 
    JPanel panel=new JPanel(); 
    panel.setLayout(new GridBagLayout()); 

    JLabel ulabel=new JLabel("Enter your Sql username"); 
    panel.add(ulabel); 
    addItem(panel,ulabel,0,0,1,1,GridBagConstraints.WEST); 

    JTextField utext=new JTextField(9); 
    panel.add(utext); 
    addItem(panel,utext,1,0,1,1,GridBagConstraints.WEST); 

    JLabel plabel=new JLabel("Enter your Sql password"); 
    panel.add(plabel); 
    addItem(panel,plabel,0,1,1,1,GridBagConstraints.WEST); 

    JTextField ptext=new JTextField(9); 
    panel.add(ptext); 
    addItem(panel,ptext,1,1,1,1,GridBagConstraints.WEST); 

    button =new JButton("enter"); 
    button.addActionListener(this); 
    panel.add(button); 
    addItem(panel,button,0,2,1,1,GridBagConstraints.CENTER); 
    this.add(panel); 
    this.pack(); 
    this.setVisible(true); 
} 

private void addItem(JPanel panel, JComponent c, int i, int j, 
     int k, int l, int align) { 
    GridBagConstraints calc=new GridBagConstraints(); 
    calc.gridx=i; 
    calc.gridy=j; 
    calc.gridwidth=k; 
    calc.gridheight=l; 
    calc.weightx=100.0; 
    calc.weighty=100.0; 
    calc.insets=new Insets(5,5,5,5); 
    calc.anchor=align; 
    calc.fill=GridBagConstraints.NONE; 
    panel.add(c,calc);  

} 


public void actionPerformed(ActionEvent arg0) { 
    if(arg0.getSource()==button){ 
     username +=utext.getText(); 
     utext.setText(null); 
     password +=ptext.getText(); 
     ptext.setText(null); 
     new sqlconnection(); 
     new gui(); 
     new first(); 
    } 
} 

Однако жировик я скомпилировать его, я получаю java.lang.NullPointerException в строке Gettext(). Помощь будет оценена :)

ответ

3

Это потому, что переменное utext и ptext внутри конструктора sqldetails() теневой переменный экземпляр одного и то же имя

sqldetails() { 
    ..... 

    // JTextField utext=new JTextField(9); //====> shadows the instance variable utext 
    this.utext=new JTextField(9); // This is the correct use 
    panel.add(utext); 
    addItem(panel,utext,1,0,1,1,GridBagConstraints.WEST); 

    ....... 

    // JTextField ptext=new JTextField(9); //=====> shadows the instance variable ptext 
    this.ptext = new JtextField(); // This is the correct use 

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