刚开始实习 近期公司成立了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().
我猜可能是消息回调机制,下次更新解决上面的问题...
今天更新了
首先是以段代码 用上下左右控制小球移动
---------------------------入口类--------------------------------------
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().
我猜可能是消息回调机制,下次更新解决上面的问题...