CodenameOne中StateMachine中类变量的非持久性
我正在编写一个应用程序,在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();
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构建器奇怪之处,这就是为什么我们正朝着新的方向发展