本人正在自学java
如下截图所示!在该程序就结构中我无法调试或运行!检查过代码、不知道问题所在!请指点一下!谢谢!
代码为:
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import demo.MainCanvas;
public class WordsMidlet extends MIDlet {
private static MainCanvas m_MainCanvas; //定义MainCanvas的引用
public WordsMidlet() {
super();// 初始化、继承Midlet类的构造
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
m_MainCanvas.Stop();
}
protected void pauseApp() {
// 由被呼叫或其他原因使程序暂停
m_MainCanvas.Stop();
}
protected void startApp() throws MIDletStateChangeException {
//程序开始运行、为m_MianCanvas分配内存空间
try{
m_MainCanvas = new MainCanvas();
}
catch(Exception ex){}
//设m_MainCanvas为屏幕的当前画布
Display.getDisplay(this).setCurrent(m_MainCanvas);
}
}
以及:
package demo;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
public class MainCanvas extends GameCanvas implements Runnable {
private boolean m_bRunning;
//控制线程的运行
public char m_achWords[][]= //存储原始字母
{ {'H','R','T','W','T'},
{'E','I','H','O','H'},
{'L','G','I','R','R'},
{'L','H','N','L','E'},
{'O','T','G','D','E'} };
public int m_nCurLine=0; //记录当前行
public int m_anDis[] ={0,1,2,3,4}; //记录每行的向左偏差数
public boolean m_bGameOK=false; //组合成功的标志
public MainCanvas() {
super(true);
Start();
}
public void Start(){
m_bRunning=true;
Thread thread=new Thread(this);
thread.start();
}
public void run(){
//获得系统当前时间,并将时间换算成以毫秒为单位的数
long T1 =System.currentTimeMillis();
long T2=T1;
while(m_bRunning){
T2=System.currentTimeMillis();
if(T2-T1>100){
T1=T2;
Input();
Logic();
Paint();
}
}
}
public void Stop(){ //终止游戏
m_bRunning=false;
}
public void Input(){
if(m_bGameOK)
return;
int keyStates=getKeyStates(); //获取当前按键状态
//如果按键方向键的向下键,则调整当前行的位置
if((keyStates&GameCanvas.DOWN_PRESSED)!=0)
m_nCurLine++;
//调整当前行的值,使他在0~4之间
if(m_nCurLine<0)
m_nCurLine+=5;
if(m_nCurLine>4)
m_nCurLine-=5;
//如果按方向键的左键,则当前行的所有字母左移
if((keyStates&GameCanvas.LEFT_PRESSED)!=0)
m_anDis[m_nCurLine]++;
//如若按方向键的右键,则当前行的所有字母右移
if((keyStates&GameCanvas.RIGHT_PRESSED)!=0)
m_anDis[m_nCurLine]--;
//考虑循环移动规则,将偏差的位数设定在0~4之间
if(m_anDis[m_nCurLine]<0)
m_anDis[m_nCurLine]+=5;
if(m_anDis[m_nCurLine]>4)
m_anDis[m_nCurLine]-=5;
}
public void Logic(){
if(m_bGameOK)
return;
m_bGameOK=true;
for(int n=0;n<5;n++){
if(m_anDis[n]!=0){
m_bGameOK=false;
break;
}
}
}
public void Paint(){
Graphics g=getGraphics();
//使用黑色清屏
g.setColor(0);
g.fillRect(0, 0, getWidth(), getHeight());
//显示字符
//realCol为所显示的字母在原始矩阵中的列数
int realCol=0;
//row为行数、col列数
for(int row=0;row<5;row++){
if(row == m_nCurLine) //当前行的字母用黄颜色显示
g.setColor(0xffffff00);
else
g.setColor(0xffffffff); //非当前行的字母用白色显示
for(int col =0;col<5;col++){
//利用偏移数获得与当前位置对应的原始矩阵中的位置
realCol = m_anDis[row]+col;
if(realCol>4)
realCol=realCol - 5;
g.drawChar(m_achWords[row][realCol],20+col*15,row*15,0);
}
}
g.setColor(0xffffffff);
if(m_bGameOK)
g.drawString("真棒,完成正确",20,80,0);
else
g.drawString("左右移动字符、使纵向拼写正确",10,80,0);
flushGraphics();
}
}