我正在编写一个App,它在StateMachine中声明了一些类变量,例如:
Label Logo=null; Image helpIcon=null;
并在initVars()
中初始化 Logo = new Label(resFile.getImage("ic_action_play.png"));
helpIcon = resFile.getImage("ic_action_help.png");
beforeMain()调用createMenu()动态设置菜单。
private void createMenu(int menuNumber, Form targetForm) {
Toolbar tb = targetForm.getToolbar();
if (menuNumber == MAIN_MENU && !menuInitialised) {
tb.addComponent(BorderLayout.WEST, Logo);
menuInitialised = true;
}
tb.addCommandToRightBar("", helpIcon, (e)->getDialog(1));
etc...
这很好用。 其中一个菜单项显示了一个对话框,"设置"如果我在beforeSetup中设置断点(表格f) 所有类变量都已重置为null。 StateMachine的实例没有改变 并没有打电话给Ctor。我可以保留初始化的唯一方法是创建(类)变量 在initVars()static中初始化。是的还是我没有正确地做到这一点?
答案 0 :(得分:0)
initVars在类初始化代码之前发生,例如:
private int myValue = 1;
protected void initVars() {
myValue = 2;
// will print 2
System.out.println(myValue);
}
public Statemachine() {
// will print 1
System.out.println(myValue);
}
输出结果如下:
2
1
由于initVars在构造函数之前发生,并且在类作用域中初始化一个值相当于在构造函数中设置它。解决方案不是初始化变量,而只是在initVars()
。
这是旧的GUI构建器奇怪之一,这就是我们向new GUI builder迈进的原因。