简体   繁体   中英

Instance of class is 'null' when action performed on netbeans GUI button

I have a program complete with a number of classes which create complex objects, with custom variables and arrays of certain variables. I want to tie the functionality of these classes into actionperformed() method calls on certain buttons and other components (such as jTextPanes) within my netbeans GUI.

Do I really need to port all my code into the UI form class? I do not currently believe that I do since I have stepped through the debugging program, checking the status of certain variables, and everything is as it should be. However, when I hit the break point by pushing one of my 'buttons', the instance of the class being used in the UI form is suddenly 'null'. This is puzzling me since it is referencing the correct instance of the class up until I hit the button.

I am new to netbeans GUI building so that probably explains my incompetence in this area.

All suggestions welcome guys.

This is the code associated with the button I am pressing:

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

The 'dM' here is the instance of a DiscourseManager class (my own work) within the main, which is here:

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();

}

Bear in mind that this code is all within the UI form. I declare a local instance of dM at the top of this form within the following:

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

The instance of the class is being recognised, as proven when I reach my breakpoint, at the dM.runDemo() line. However once I hit the button and another break point is hit (placed one on the button method), it says dM is null. I hope this is just a really silly error that I am missing, since rearranging all my code would be soul-destroying simply to add a UI for demo purposes.

The easiest way to fix it would be to set the static dM

final DiscourseManager dM = new DiscourseManager();

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

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

But if you want a cleaner way by eliminating the public static member,

Try this

public class DialogueManagerUI extends javax.swing.JFrame { 

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

...
}

and

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);
        }
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM