在日常黑莓开发中,我们会用到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:★★★★★

導航欄的背景建議修改下,看得不是很清楚
最上面那条白底的?
恩
更復雜了
来访问站长了,我的网站是关于创业的,有时间回访一下,多多交流,交个朋友
我怎么记得你以前不是这个内容啊,难道我混淆了?
我也記得不是
看不懂@.@
黑莓现在已经不行了吧