让后台程序在桌面显示提示文字,并自动消失

后台运行的程序(Application)没有窗口(Screen),也就无法显示提示窗口(Dialog),使用下面的代码可以让后台程序在桌面显示提示信息,并在5秒钟后或按任意键后自动消失。


首先,在需要提示的地方,加入如下代码

synchronized (Application.getEventLock())
{
    Screen screen=new GlobalDialogScreen("Something text showing on HomeScreen");
    Ui.getUiEngine().pushGlobalScreen(screen, 1, UiEngine.GLOBAL_QUEUE);
}

其次,新建一个PopScreen窗口类

package code;

import java.util.Timer;
import java.util.TimerTask;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

public class GlobalDialogScreen extends PopupScreen
{
    public GlobalDialogScreen(String msg)
    {
        super(new VerticalFieldManager(),Field.FOCUSABLE);
        HorizontalFieldManager hfm=new HorizontalFieldManager();

        hfm.add(new BitmapField(Bitmap.getPredefinedBitmap(Bitmap.INFORMATION)));
        hfm.add(new LabelField(msg));

        add(hfm);

        Timer timer=new Timer();
        TimerTask timerTask;

        timerTask=new TimerTask() {
            public void run() {
                getApplication().invokeAndWait(new Runnable() {
                    public void run() {
                        closeScreen();
                    }
                });
            }
        };
        timer.schedule(timerTask, 5000);
    }

    private void closeScreen()
    {
        Ui.getUiEngine().popScreen(this);
    }

    public boolean keyChar(char key, int status, int time)
    {
        Ui.getUiEngine().popScreen(this);

        return true;
    }
}


发现bug,如果按键盘任意键关闭窗口,TimerTask继续运行,最后导致NullPointerException,还是取消按任意键关闭窗口吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值