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

CodenameOne中StateMachine中类变量的非持久性,codenameone,Codenameone,我正在编写一个应用程序,在StateMachine中声明一些类变量,例如: Label Logo=null; Image helpIcon=null; 这些都是在initVars()中初始化的 beforeMain()调用createMenu()动态设置菜单 private void createMenu(int menuNumber, Form targetForm) { Toolbar tb = targetForm.getToolbar();

我正在编写一个应用程序,在StateMachine中声明一些类变量,例如:

    Label Logo=null;        Image helpIcon=null;
这些都是在initVars()中初始化的

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中初始化。这是对的还是我做得不对?

初始化变量发生在类初始化代码之前,例如:

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构建器怪癖,这就是为什么我们要转向。initVars发生在类init代码之前,例如:

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构建器奇怪之处,这就是为什么我们正朝着新的方向发展