我有一个程序,其中包含许多创建复杂对象的类,具有自定义变量和某些变量的数组。我想将这些类的功能绑定到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);
}
});