请教一下各位高手!

alex6861027 2010-02-21 02:13:08
本人正在自学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();

}
}


...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex6861027 2010-02-24
  • 打赏
  • 举报
回复
是的!确实是环境变量没有设置好!因为我是使用两个系统的!切换系统时忘了新建环境变量!
kactanse 2010-02-22
  • 打赏
  • 举报
回复
你的if语句中的{}落了,别把C的习惯带到Java中
xiaoguan_Java 2010-02-21
  • 打赏
  • 举报
回复
我的意思是说你工程中所用的jdk版本与环境变量中配置的jdk不一致
xiaoguan_Java 2010-02-21
  • 打赏
  • 举报
回复
是不是jdk的问题啊
softice_ 2010-02-21
  • 打赏
  • 举报
回复
怎么无法调试?把异常贴出来看看
凡员外 2010-02-21
  • 打赏
  • 举报
回复
引用楼主 alex6861027 的回复:
本人正在自学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();

}
}
microedition
梦_枫 2010-02-21
  • 打赏
  • 举报
回复
有没有报错啊。。。。。。。。。。。。。。。。

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧