Java 类的实例是';空';在netbeans GUI按钮上执行操作时
我有一个完整的程序,其中包含许多创建复杂对象的类、自定义变量和特定变量数组。我想将这些类的功能绑定到netbeans GUI中某些按钮和其他组件(如jTextPanes)上的actionperformed()方法调用中 我真的需要将所有代码移植到UI表单类中吗?我现在不相信我会这样做,因为我已经完成了调试程序,检查了某些变量的状态,并且一切都是应该的。但是,当我按下一个“按钮”到达断点时,UI表单中使用的类的实例突然变为“null”。这让我感到困惑,因为在我按下按钮之前,它一直在引用类的正确实例 我是netbeans GUI构建的新手,所以这可能解释了我在这方面的无能 欢迎大家提出建议 这是与我按下的按钮相关的代码:Java 类的实例是';空';在netbeans GUI按钮上执行操作时,java,user-interface,netbeans,button,nullpointerexception,Java,User Interface,Netbeans,Button,Nullpointerexception,我有一个完整的程序,其中包含许多创建复杂对象的类、自定义变量和特定变量数组。我想将这些类的功能绑定到netbeans GUI中某些按钮和其他组件(如jTextPanes)上的actionperformed()方法调用中 我真的需要将所有代码移植到UI表单类中吗?我现在不相信我会这样做,因为我已经完成了调试程序,检查了某些变量的状态,并且一切都是应该的。但是,当我按下一个“按钮”到达断点时,UI表单中使用的类的实例突然变为“null”。这让我感到困惑,因为在我按下按钮之前,它一直在引用类的正确实例
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中DiscusseManager类(我自己的作品)的实例,如下所示:
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为null。我希望这只是我遗漏的一个非常愚蠢的错误,因为重新排列我的所有代码只需添加一个用于演示目的的UI,就会破坏灵魂。最简单的修复方法是设置静态
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;
}
...
}
及
您能在这里发布您正在谈论的初始化实例的代码和发生空指针异常的代码段吗?这是否仍然允许我在DiscusseManager类中使用get()和set()方法?顺便说一句,非常感谢您的建议,非常感谢。欢迎您,它应该允许您在DiscussionManager中使用get()和set(),只要它们是公共的。oops混淆了我的语言<代码>只读是c#。用于java的
final
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);
}
});