在 netbeans GUI 按钮上执行操作时类的实例为"空"



我有一个程序,其中包含许多创建复杂对象的类,具有自定义变量和某些变量的数组。我想将这些类的功能绑定到netbeans GUI中某些按钮和其他组件(如jtextpane)上的actionperformed()方法调用中。

我真的需要把我所有的代码移植到UI表单类吗?我目前不相信我做了,因为我已经完成了调试程序,检查了某些变量的状态,一切都是应该的。然而,当我通过按我的一个"按钮"击中断点时,在UI表单中使用的类的实例突然变为"null"。这让我感到困惑,因为它引用了类的正确实例,直到我按下按钮。

我是netbeans GUI构建的新手,所以这可能解释了我在这方面的无能。

欢迎大家提建议。

这是与我正在按的按钮相关的代码:

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

这里的'dM'是main中的dissemanager类(我自己的作品)的实例,在这里:

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

请记住,这些代码都在UI表单中。我在这个表单的顶部声明了dM的一个局部实例:

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

类的实例正在被识别,正如我在dM.runDemo()行到达断点时所证明的那样。然而,一旦我点击按钮,另一个断点被击中(在按钮方法上放置一个),它说dM为空。我希望这只是我遗漏的一个非常愚蠢的错误,因为重新排列我所有的代码只是为了添加一个演示目的的UI将会毁灭灵魂。

修复它的最简单方法是设置静态dM

final DiscourseManager dM = new DiscourseManager();
java.awt.EventQueue.invokeLater(new Runnable()
{
    public void run()
    {
     DialogueManagerUI.dM = dM;
     new DialogueManagerUI().setVisible(true);
    }
});

但是如果你想用一种更简洁的方式消除public static成员,

试试这个

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

相关内容

  • 没有找到相关文章

最新更新