关于j2me的一个按键问题

最近在做j2me时遇到了一个问题,怎么也解决不了,现在把问题列出来,希望有遇过这种问题的人能够告诉我解决的方法。

问题是这样子的,我在一个GameCanvas实现了Runnable和CommandListener接口,并加入了多个的Command,而且里面有一个方法使用getKeyStates()取得用户的输入并进行相应的处理。运行时,如果我不按Command,则一切正常,如果选择某一个Command(要按到Fire键)则以后getKeyStates()方法总会得到Fire键,即使我之后并没有按任何的键。

给出一个这种例子的代码:

import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.*;

public class TestCanvas extends GameCanvas implements Runnable,CommandListener{
 
 private final Command c1 = new Command("Command1",Command.OK,0);
 private final Command c2 = new Command("Command2",Command.OK,1);
 private final Command c3 = new Command("Command3",Command.OK,2);
 private final Command c4 = new Command("Command4",Command.OK,3);
 private final Command c5 = new Command("Command5",Command.OK,4);
 
 public TestCanvas(){
  super(true);
  addCommand(c1);
  addCommand(c2);
  addCommand(c3);
  addCommand(c4);
  addCommand(c5);
  setCommandListener(this);
 }
 public void input(){
  int keyState = this.getKeyStates();
  if(keyState == 0) return;
  if((keyState&LEFT_PRESSED)!=0){
   System.out.println(keyState);
   System.out.println("Left");
  }else if ((keyState&RIGHT_PRESSED)!=0){
   System.out.println(keyState);
   System.out.println("Right");
  }else if ((keyState&DOWN_PRESSED)!=0){
   System.out.println(keyState);
   System.out.println("Down");
  }else if ((keyState&UP_PRESSED)!=0){
   System.out.println(keyState);
   System.out.println("Left");
  }else if ((keyState&FIRE_PRESSED)!=0){
   System.out.println(keyState);
   System.out.println("Fire");
  }else {
   System.out.println(keyState);
   System.out.println("other");
  }
 }
 public void run() {
   while(true){
    input();
    try{
     Thread.sleep(100);
    }catch(InterruptedException e){
     
    }
   }
 }
 
 public void commandAction(Command c, Displayable d){
 }
 
}

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class TestMIDlet extends MIDlet {
 
 public TestMIDlet() {
  // TODO Auto-generated constructor stub
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO Auto-generated method stub

 }

 protected void pauseApp() {
  // TODO Auto-generated method stub

 }

 protected void startApp() throws MIDletStateChangeException {
  // TODO Auto-generated method stub
  TestCanvas canvas = new TestCanvas();
  Display.getDisplay(this).setCurrent(canvas);
  Thread t = new Thread(canvas);
  t.start();
 }

}

例子图

实际上,用keyPressed和keyReleased可以很好地解决这个问题,可是又很实现连续按键,而用keyRepeated的话又会出现上面的问题。烦啊~烦

阅读更多
想对作者说点什么? 我来说一句

解决J2ME开发中的连续按键问题

2009年07月04日 31KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭