CodenameOne中StateMachine中类变量的非持久性

时间:2016-08-04 08:26:37

标签: codenameone

我正在编写一个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中初始化。是的还是我没有正确地做到这一点?

1 个答案:

答案 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迈进的原因。