J2ME MIDP2.0 实现摩西密码SOS的闪光!

MIDP2.0 的DISPLAY类里增加了后背闪光的功能flashBacklight().  我是用MOTO的V3, 有直接支持.  索爱和NOKIA他们有各自的IMPLEMENTATION.  我这里简单介绍一下MOTO的用法 :)

SOS的MORSE CODE是...---..., S 是3点,O是3横,呵呵,代表的意思有的说是: SAVE MY SHIP (救我的船) 或者 SAVE MY SOULS (救命), 其实据说没有什么实际意思

点的话就闪的时间短点, 横的话就闪的时间长点, 可以在flashBacklight(int interval)的INTERVAL里设置.

整个程序在一个THREAD里面一直循环, 直到你被救为止

先定义个MIDLET, 很简单的一个:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class MorseSOSMIDlet extends MIDlet {

 static MIDlet instance;
 static Canvas c;
 
 public MorseSOSMIDlet() {
  super();
  instance = this;
 }

 protected void startApp() throws MIDletStateChangeException {
  c = new SOSCanvas();
  Display.getDisplay(MorseSOSMIDlet.instance).setCurrent(c);
 }

 protected void pauseApp() {
 }

 protected void destroyApp(boolean b) throws MIDletStateChangeException {
  destroyApp(true);
  notifyDestroyed();
  c = null;
  instance = null;
 }
}

然后编个承接CANVAS类的子类:

import javax.microedition.lcdui.*;

public class SOSCanvas extends Canvas implements CommandListener, Runnable {

 private Command exitCmd = new Command("退出", Command.EXIT, 1);
 private Display display;
 
 public SOSCanvas() {
  addCommand(exitCmd);
  setCommandListener(this);
  display = Display.getDisplay(MorseSOSMIDlet.instance);
  Thread t = new Thread(this);
  t.start();
 }
 
 protected void paint(Graphics g) {
  g.setColor(0x00FFFFFF);
  g.fillRect(0,0,getWidth(),getHeight());
 }

 public void commandAction(Command c, Displayable d) {
  if (c == exitCmd) {
   MorseSOSMIDlet.instance.notifyDestroyed();
  }
 }

 public void run() {
  while (true) {
   try {
    Thread.sleep(1500);
    
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    
    display.flashBacklight(3000);
    Thread.sleep(1000);
    display.flashBacklight(0);
    Thread.sleep(1000);
    
    display.flashBacklight(3000);
    Thread.sleep(1000);
    display.flashBacklight(0);
    Thread.sleep(1000);
    
    display.flashBacklight(3000);
    Thread.sleep(1000);
    display.flashBacklight(0);
    Thread.sleep(1000);
    
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);
    
   } catch (Exception e) {
    // nothing
   }
  }
 } 
}

点的实现:

    display.flashBacklight(1000);
    Thread.sleep(500);
    display.flashBacklight(0);
    Thread.sleep(500);


横的实现

    display.flashBacklight(3000);
    Thread.sleep(1000);
    display.flashBacklight(0);
    Thread.sleep(1000);

不知道这样的做法是不是最高效的, 不过用起来还蛮好的.  欢迎各位指正!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值