在我的应用程序中,我有一个主窗体,其中包含处理其他操作的按钮,例如我的主窗体显示系统中所有实体的列表,然后用户可以选择然后添加或编辑这些实体申请。
当用户按下“添加”时,将打开一个新的JFrame,允许它们添加到系统中。这一切都很好,但是我遇到一个影响某些功能的小问题。 我写了一个CommandTracker,允许我撤消和重做操作,库工作正常,但我正在努力从其他表单引用我的主窗体上的CommandTracker对象。 (希望代码能更好地传达我的问题)
主要表格声明:
protected CommandTracker;
// This is instantiated in my constructor, trying to show less code to keep simple.
objCommandTracker = new CommandTracker();
这会在我的主窗体中实例化我的新Command Tracker对象,然后我想从子窗体中引用这个对象,以便我可以附加在子窗体中触发的下一个命令。
到目前为止,我已尝试通过在子表单.java文件中提供对主表单的引用来解决此问题
protected static MainMenu main_menu = null;
然后我尝试按如下方式访问命令跟踪器
// Run AddRequestCommand, through the command tracker
mainMenu.objCommandTracker.executeCommand(addCommand);
但是,这会导致抛出空指针异常,我认为这是因为mainMenu在其声明中有一个空引用。如何将当前活动的MainMenu实例传递给子表单?
答案 0 :(得分:0)
使用静力学绝不是解决这类问题的方法。解决方案是在需要的地方传递有效的引用,并在这些引用上调用适当的方法。
换句话说,如果一个类需要引用另一个类,则通过参数传递引用,可以是构造函数参数或者setter方法参数,使用它来设置字段,然后你可以自由地调用方法关于那个班级的那篇文章。
顺便说一句:在其他时候,我们需要讨论用户拍摄多个JFrame的问题,以及非正式使用术语“表单”,就好像它在Swing库中具有标准含义一样 - - 它没有,所以你会想要使用其他更清晰的术语。