2013-02-02 199 views
0

當我在管線77 lblNewLabel.setVisible(false); 其由線65在下面的代碼runTest();稱爲得到NullPointerException錯誤NullPointException錯誤。 (這是我寫的一個虛擬項目,用於模擬我在較大項目中遇到的問題)。我想要做的是根據項目中各個位置的用戶操作更改幾個字段,按鈕等的屬性。我想將所有更改分組在一個單獨的方法中,這些方法可以通過各種其他方法調用。我仍然是Java新手,來自一些Visual Basic和Pascal的經驗。似乎我想要做的事情應該是直截了當的,但現在,我不知所措。預先感謝您的建議。設置屬性

package woodruff; 

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import javax.swing.SwingConstants; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JTextField; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 

public class MyTest extends JFrame { 

    private JPanel contentPane; 
    private JTextField txtHasFocus; 
    private JLabel lblNewLabel; 

    /** 
    * Create the frame. 
    */ 
    public MyTest() { 
     initialize(); 
    } 

    private void initialize() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 237, 161); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 
     final JLabel lblNewLabel = new JLabel("This is a label."); 
     lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); 
     lblNewLabel.setHorizontalTextPosition(SwingConstants.CENTER); 
     lblNewLabel.setBounds(10, 25, 202, 14); 
     contentPane.add(lblNewLabel); 

     JButton btnShow = new JButton("Show"); 
     btnShow.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       lblNewLabel.setVisible(true); 
      } 
     }); 
     btnShow.setBounds(10, 50, 89, 23); 
     contentPane.add(btnShow); 

     JButton btnHide = new JButton("Hide"); 
     btnHide.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       lblNewLabel.setVisible(false); 
      } 
     }); 
     btnHide.setBounds(123, 50, 89, 23); 
     contentPane.add(btnHide); 

     txtHasFocus = new JTextField(); 
     txtHasFocus.addFocusListener(new FocusAdapter() { 
      @Override 
      public void focusGained(FocusEvent arg0) { 
       // Following results in NullPointerException error 
       // at woodruff.MyTest.runTest(MyTest.java:77) 
       runTest(); 
      } 
     }); 
     txtHasFocus.setHorizontalAlignment(SwingConstants.CENTER); 
     txtHasFocus.setText("Has Focus?"); 
     txtHasFocus.setBounds(67, 92, 86, 20); 
     contentPane.add(txtHasFocus); 
     txtHasFocus.setColumns(10); 
    } 

    private void runTest() { 
     lblNewLabel.setVisible(false); 
    } 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MyTest frame = new MyTest(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 

回答

3

initialize()方法,你已經創建了一個local變量JLabel,因此不會初始化instance field,作爲一個原因,它仍然初始化爲null,因此NPE

final JLabel lblNewLabel = new JLabel("This is a label."); 

變化上面的行到: -

lblNewLabel = new JLabel("This is a label."); 
+0

感謝。這照顧了它!現在,我的大項目。 – Paul

+0

@保羅..不客氣:) –