走上j2me的道路 第一集

刚开始实习 近期公司成立了android研发小组 我和几个同事一起被选进去做培养。以后不做J2EE了,老大说我们每天自己学习新技术,我呢会及时更新博客,貌似明天先叫我们看j2me,我一定要加油 我现在有最宝贵的青春做后盾 没老婆没孩子拼了
今天更新了
首先是以段代码 用上下左右控制小球移动

---------------------------入口类--------------------------------------
package day01;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;

public class MyDisPlay extends MIDlet {

private Display display;

public MyDisPlay() {
display = Display.getDisplay(this);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
System.out.println("destroyApp");
System.out.println("destroyApp线程"+Thread.currentThread());
}

protected void pauseApp() {
System.out.println("pauseApp");
}

protected void startApp() throws MIDletStateChangeException {
System.out.println("startApp");
MyCanvas mc = new MyCanvas();
mc.setTitle("画布");
mc.setFullScreenMode(true);
mc.sizeChanged(200,100);

display.setCurrent(mc);
}

}
---------------程序入口类-----------------------------------

--------------------画布类-------------------------------------
package day01;

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MyCanvas extends Canvas implements Runnable {

private int type;
private int x = 100;
private int y = 100;
private Image img;

public MyCanvas() {
Thread th = new Thread(this);
th.start();
}

protected void paint(Graphics g) {
System.out.println("paint线程 " + Thread.currentThread());
System.out.println("paint");
g.setColor(0xffffff);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(0xff0000);
g.fillArc(x, y, 50, 50, 0, 360);

}

public int getGameAction(int keyCode) {
// TODO Auto-generated method stub
return super.getGameAction(keyCode);
}

public int getKeyCode(int gameAction) {
// TODO Auto-generated method stub
return super.getKeyCode(gameAction);
}

public String getKeyName(int keyCode) {
// TODO Auto-generated method stub
return super.getKeyName(keyCode);
}

public boolean hasPointerEvents() {
// TODO Auto-generated method stub
return super.hasPointerEvents();
}

public boolean hasPointerMotionEvents() {
// TODO Auto-generated method stub
return super.hasPointerMotionEvents();
}

public boolean hasRepeatEvents() {
// TODO Auto-generated method stub
return super.hasRepeatEvents();
}

protected void hideNotify() {
// TODO Auto-generated method stub
super.hideNotify();
System.out.println("hideNotify");
System.out.println("hideNotify线程 " + Thread.currentThread());
}

public boolean isDoubleBuffered() {
// TODO Auto-generated method stub
return super.isDoubleBuffered();
}

protected void keyPressed(int keyCode) {
// TODO Auto-generated method stub
super.keyPressed(keyCode);

System.out.println(keyCode + " keyPressed");
System.out.println("keyPressed线程 " + Thread.currentThread());
type = keyCode;
}

protected void keyReleased(int keyCode) {
// TODO Auto-generated method stub
super.keyReleased(keyCode);
System.out.println(keyCode + " keyReleased");
System.out.println("keyReleased线程 " + Thread.currentThread());
type=-5;
}

protected void keyRepeated(int keyCode) {
// TODO Auto-generated method stub
super.keyRepeated(keyCode);

System.out.println(keyCode + " keyRepeated ");
System.out.println("keyRepeated线程 " + Thread.currentThread());
}

protected void pointerDragged(int x, int y) {
// TODO Auto-generated method stub
super.pointerDragged(x, y);
}

protected void pointerPressed(int x, int y) {
// TODO Auto-generated method stub
super.pointerPressed(x, y);
}

protected void pointerReleased(int x, int y) {
// TODO Auto-generated method stub
super.pointerReleased(x, y);
}

public void setCommandListener(CommandListener l) {
// TODO Auto-generated method stub
super.setCommandListener(l);
}

public void setFullScreenMode(boolean mode) {
super.setFullScreenMode(mode);
System.out.println("setFullScreenMode");
System.out.println("setFullScreenMode线程 " + Thread.currentThread());
}

protected void showNotify() {
super.showNotify();
System.out.println("showNotify");
System.out.println("showNotify线程 " + Thread.currentThread());
}

protected void sizeChanged(int w, int h) {
// TODO Auto-generated method stub
super.sizeChanged(w, h);
System.out.println("sizeChanged" + w + " " + h);
System.out.println("sizeChanged线程 " + Thread.currentThread());
}

public void run() {
while (true) {
System.out.println("不死线程"+Thread.currentThread());
switch (type) {
case -1:
y -= 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -2:
y += 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -3:
x -= 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -4:
x += 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
break;
}
}
}

}
------------------------------总结--------------------------------
用了线程控制小球移动 此程序正常运行
我使用了很多标记语句(打印语句)发现了很多问题:
1。在循环体中写repaint();不管你写几次,他只执行一次
例:for(int i=0;i<10;i++){
System.out.println("--i--");
repaint();
}
结果只运行10 次打印1次repaint();根据paint()只被调用一次判断的,没明白。
把 repaint();换成serviceRepaints() 竟然一次也不打印,奇怪。

2.上下左右控制 事件 流程我通过标记语句明白了
于是我在构造器中调用控制事件,结果一点反应也没 仍然只执行paint()1次,和不写一样(因为paint()必然执行一次)。
构造器代码如下:
for(int i = 0;i<10;i++){
keyPressed(-1);
keyReleased(-1);
}
我想可能事件触发必须硬件输入,并不是我表面想的那样,(也就是无法用代码实现)。
3.在构造器中写repaint(),程序也完全无视,写不写都只执行一次paint().

我猜可能是消息回调机制,下次更新解决上面的问题...
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值