Экземпляр класса равен 'null', когда действие выполняется над кнопкой GUI NetBeans - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть программа с несколькими классами, которые создают сложные объекты, с пользовательскими переменными и массивами определенных переменных. Я хочу связать функциональность этих классов с вызовами метода actionperformed () для определенных кнопок и других компонентов (таких как jTextPanes) в моем графическом интерфейсе NetBeans.

Мне действительно нужно перенести весь мой код в класс формы интерфейса пользователя? В настоящее время я не верю в это, поскольку я прошел программу отладки, проверяя состояние определенных переменных, и все так, как и должно быть. Однако, когда я нажимаю одну из моих «кнопок» на точку останова, экземпляр класса, используемого в форме пользовательского интерфейса, неожиданно становится «нулевым». Это озадачивает меня, поскольку ссылается на правильный экземпляр класса, пока я не нажму кнопку.

Я новичок в построении графического интерфейса NetBeans, что, вероятно, объясняет мою некомпетентность в этой области.

Все предложения приветствуются, ребята.

Это код, связанный с кнопкой, которую я нажимаю:

private void submitDetailsButtonMouseClicked(java.awt.event.MouseEvent evt) 
{
    //outputTextArea.setText("Get out");
    dM.dHist2.frameStack[dM.dHist2.frameAmount].setAccomName("Win");
    dM.dHist2.saveAndStoreFrame();
}

Здесь 'dM' является экземпляром класса DiscourseManager (моя собственная работа) внутри main, который находится здесь:

public static void main(String args[]) 
{
    DiscourseManager dM = new DiscourseManager();

    java.awt.EventQueue.invokeLater(new Runnable()
    {

        public void run()
        {
         new DialogueManagerUI().setVisible(true);
        }
    });

    dM.startTransaction();
    dM.runDemo();

}

Имейте в виду, что этот код находится внутри формы пользовательского интерфейса. Я объявляю локальный экземпляр dM в верхней части этой формы следующим образом:

public class DialogueManagerUI extends javax.swing.JFrame { public static DiscourseManager dM; .... }

Экземпляр класса распознается, что подтверждается, когда я достигаю своей точки останова, в строке dM.runDemo (). Однако, как только я нажимаю кнопку, и достигается другая точка останова (помещается одна на методе кнопки), он говорит, что dM равен нулю. Я надеюсь, что это просто глупая ошибка, которую я пропускаю, поскольку перестановка всего моего кода будет разрушать душу, просто добавив пользовательский интерфейс для демонстрационных целей.

1 Ответ

0 голосов
/ 29 апреля 2011

Самый простой способ исправить это - установить статический dM

final DiscourseManager dM = new DiscourseManager();

java.awt.EventQueue.invokeLater(new Runnable()
{

    public void run()
    {
     DialogueManagerUI.dM = dM;
     new DialogueManagerUI().setVisible(true);
    }
});

Но если вы хотите более чистый способ, исключив открытый статический член,

Попробуйте это

public class DialogueManagerUI extends javax.swing.JFrame { 

private final DiscourseManager dM; 
DialogueManagerUI(DiscourseManager dM)
{
    this.dM = dM;
}

...
}

и

public static void main(String args[]) 
{
    final DiscourseManager dM = new DiscourseManager();

    java.awt.EventQueue.invokeLater(new Runnable()
    {

        public void run()
        {
         new DialogueManagerUI(dM).setVisible(true);
        }
    });
...