Почему я получаю исключение NullPointerException при попытке отключить JFrame? - PullRequest
0 голосов
/ 08 ноября 2011

Я получаю сообщение об ошибке NullPointerException во время выполнения, когда пытаюсь нажать кнопку параметров на моем JFrame.JFrame - это CharSelection (), и я хочу отключить его, чтобы я не мог ничего щелкнуть по этому JFrame и должен нажать кнопку «Назад», чтобы включить его снова.Это код для кнопки.

    JButton btnOptions = new JButton("Options");
    btnOptions.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            CharSelection.disabled();
            GameMenu.getMusicOption().setVisible(true);
        }
    });
    btnOptions.setForeground(Color.WHITE);
    btnOptions.setFocusPainted(false);
    btnOptions.setBackground(Color.BLACK);
    btnOptions.setBounds(10, 669, 200, 50);
    contentPane.add(btnOptions);

Внутри события mouseClicked я пытаюсь отключить, а затем получить другой jFrame. Я точно знаю, что могу получить другой JFrame, если отключить отключение.строка, метод, который я использую для отключения JFrame, - это метод, который я создал в классе CharSelection. Вот и все.

    public static void disabled(){
    frame.setEnabled(false);
}

У меня кадр создан как

    private static CharSelection frame;

Thisизбегает любых ошибок компиляции, но всякий раз, когда я запускаю программу и нажимаю эту кнопку с этим кодом, ничего не происходит, и я получаю ошибку NullPointerException.Не уверен, как это исправить, но вы также должны знать, что я делаю то же самое в первом Jframe GameMenu.За исключением того, что JFrame отключает без проблем, я пытался выяснить эту проблему в течение нескольких дней, тратя около 4 часов в день исключительно на эту проблему и не могу понять это.

Ошибкакод такой:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at game.CharSelection.disabled(CharSelection.java:1925)
at game.CharSelection$34.mouseClicked(CharSelection.java:1748)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Самые важные строки - первые три.Я могу только размышлять о том, что является причиной этого, и, не зная причины, у меня нет способа это исправить.Спасибо за помощь, спасибо.

Надеюсь, это поможет вам увидеть код, я вынул все ненужные вещи.

        private static CharSelection frame;


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

/**
 * Create the frame.
 */
public CharSelection() {


    JButton btnOptions = new JButton("Options");
    btnOptions.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            CharSelection.disabled();
            GameMenu.getMusicOption().setVisible(true);
        }
    });
    btnOptions.setForeground(Color.WHITE);
    btnOptions.setFocusPainted(false);
    btnOptions.setBackground(Color.BLACK);
    btnOptions.setBounds(10, 669, 200, 50);
    contentPane.add(btnOptions);
}

        public static void disabled(){
    frame.setEnabled(false);
}

public static void enabled(){
    frame.setEnabled(true);
}

1 Ответ

1 голос
/ 08 ноября 2011

Вы не создаете экземпляр кадра на самом деле. Там есть

frame = new JFrame()

где-то отсутствует.

Плюс делать это с помощью static методов выглядит очень плохой практикой, но трудно предложить решение, не видя всей картины.

...