0

次のコードのlblNewLabel.setVisible(false); 65 行目から呼び出される77 行目で NullPointerException エラーが発生します。runTest();(これは、大規模なプロジェクトで発生している問題をシミュレートするために作成したダミー プロジェクトです)。私がやろうとしているのは、プロジェクトのさまざまな場所でのユーザー アクションに基づいて、いくつかのフィールド、ボタンなどの属性を変更することです。すべての変更を、他のさまざまなメソッドから呼び出すことができる別のメソッドにグループ化したいと考えています。私はまだ 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();
                }
            }
        });
    }
}
4

1 に答える 1

2

このinitialize()メソッドでは、 のlocal変数を作成したため、をJLabel初期化していません。instance fieldnullNPE

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

上記の行を次のように変更します: -

lblNewLabel = new JLabel("This is a label.");
于 2013-02-02T17:51:47.243 に答える