在日常黑莓开发中,我们会用到optionprovider来将app集成到系统的选项菜单里。tiandi在实际开发过程中,遇上了一个问题,见下文所述。
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.
文章评分1次,平均分5.0:★★★★★
導航欄的背景建議修改下,看得不是很清楚
最上面那条白底的?
恩
更復雜了
来访问站长了,我的网站是关于创业的,有时间回访一下,多多交流,交个朋友
我怎么记得你以前不是这个内容啊,难道我混淆了?
我也記得不是
看不懂@.@
黑莓现在已经不行了吧