public class NewClass extends UiApplication
{
public static Timer s1;
public static int remain =0;
public static void main(String[] args)
{
NewClass app = new NewClass();
s1 = new Timer();
s1.scheduleAtFixedRate(new TimerMainEvent(),1000,1000);
NewClass.remain = 50;
op provider = new op();
OptionsManager.registerOptionsProvider(provider);
app.enterEventDispatcher();
}
public NewClass()
{
pushScreen(new testscreen());
}
}
class testscreen extends MainScreen {
public testscreen(){
super();
ButtonField b1 = new ButtonField("test",ButtonField.CONSUME_CLICK);
add(b1);
b1.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
NewClass.remain = 100;
System.out.println("****Log****:now ="+ NewClass.remain);
if(NewClass.s1 != null){
System.out.println("****Log****:turn off s1");
NewClass.s1.cancel();
}
}
});
}
}
class TimerMainEvent extends TimerTask {
public TimerMainEvent() {
}
public void run() {
System.out.println("****Log****:now ="+ NewClass.remain);
}
}
class op implements OptionsProvider {
public op(){
}
public String getTitle() {
return "aaa";
}
public void populateMainScreen(final MainScreen mainScreen) {
ButtonField b1 = new ButtonField("test",ButtonField.CONSUME_CLICK);
mainScreen.add(b1);
b1.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
NewClass.remain = 100;
System.out.println("****Log****:now ="+ NewClass.remain);
if(NewClass.s1 != null){
System.out.println("****Log****:turn off s1");
NewClass.s1.cancel();
}
}
});
}
public void save() {
};
}
以上代码:如果是OptionsProvider中的mainscreen按钮test按下时,NewClass.s1是null的,timer会打断。
如果是程序本身的mainscreen的test按钮按下时,NewClass.s1是不等于null的。
队长给的正确答案:op产生的进程导致静态变量不能在另一个进程里调用到,所以一直返回null.