刚开始实习 近期公司成立了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().
我猜可能是消息回调机制,下次更新解决上面的问题...
分享到:
相关推荐
“J2ME书上的教程”暗示这个项目可能是从一本关于J2ME编程的教材中获取灵感或者直接作为教学示例的。这样的教程通常会详细介绍游戏的实现过程,包括图形界面设计、用户交互处理、游戏逻辑编程以及性能优化等关键知识...
【J2ME Polish环境搭建详解】 J2ME Polish是一款强大的工具,用于提升Java Mobile应用程序的用户体验,它提供了丰富的UI库和自动化...记住,不断学习和实践是提高技能的关键,祝你在J2ME应用开发的道路上越走越远!
作为基础,J2SE SDK的安装是第一步。选择全部文件进行安装,完成后才能进行下一步。 ##### 2. 安装SunOne Studio 4 Mobile Edition 接着,安装SunOne Studio 4 Mobile Edition,注意选择已安装的J2SE SDK 1.4.1路径...
【Java实习心得】 Java语言,作为一种静态面向对象的编程语言,以其优雅的编程思维和强大的面向对象特性,深受程序员喜爱。实习过程中,初次接触Java,...在Java开发的道路上,持之以恒的学习和实践,将助你走得更远。
首先,学习Java标准版(JavaSE)是任何想要掌握Java的人必须迈出的第一步。JavaSE不仅包含了Java语言的基础知识,还有丰富的类库和API,是进一步学习的基石。紧接着,在学习JavaSE的同时,应该同步学习数据结构与...
在众多的IT领域中,选择一个适合自己的方向是自学成功的第一步。Java、.NET、手机开发、嵌入式开发、游戏编程、3G技术以及软件测试等领域,各具特色。对初学者来说,重要的是根据当前的市场需求和个人兴趣做出明智的...
总之,Java自学之路是一场既漫长又充满挑战的旅程,但只要有恒心和正确的方法,每个Java初学者都能走上成为高手的道路。正如本文所阐述的自学方法、路线图、技术要点和书籍资料等,这些知识与工具,将帮助初学者在...
本文将根据一位资深Java程序员的经验分享,为初学者提供一条清晰的学习路径,帮助大家在Java之旅中少走弯路,加速成长。 #### Java的三大领域:J2SE、J2ME与J2EE Java自问世以来,其应用范围广泛,涵盖桌面应用、...
Java 自学之路是一条充满挑战但也充满机遇的道路。对于那些无法参加正式培训的人来说,通过自我学习来掌握 Java 技能是实现职业发展的有效途径。以下是一个详细的指南,旨在帮助自学 Java 的初学者规划学习路径。 ...
### Java学习之路:高效进阶指南 #### 一、引言与学习心态 在开始Java学习之旅之前,首先需要调整好自己的心态。本篇文章将从多个角度深入剖析Java的...希望每位学习者都能在Java这条道路上越走越远,取得辉煌成就。
### 个人收藏的编程下载资源全面解析 在数字化时代,编程资源的获取变得前所未所地便捷,但对于初学者或是寻找特定资源的专业人士来说,筛选出高...通过合理利用这些资源,每个人都可以在编程的道路上走得更远、更深。