工程名:ok3
目的:让一只猴子脸在屏幕上来回跑,如果跑到屏幕边上则从对称的坐标位置继续跑,这样便可以看到持续的动画。目前的问题是:如果导入两张图片,则在JB里报“cannot read”第二张图片,但是第一张没报;在模拟器运行时报“java.sun.NullPointerException”的异常,目前暂无解决的迹象。代码如下:
// ok3.java
package ok3;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class ok3 extends MIDlet {
private Canvas canvas;
private Display display;
public void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
canvas = new ok3Displayable();
display.setCurrent(canvas);
}
public void pauseApp() {}
public void destroyApp(boolean bool) throws MIDletStateChangeException {
}
}
// ok3Displayable.java
package ok3;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.io.*;
public class ok3Displayable extends Canvas implements Runnable{
private Image monkey;
private int x = 20; // x
坐标
private int y = 120; // y
坐标
public ok3Displayable(){
try {
monkey = Image.createImage("/ohyeah.png");
}
catch(IOException e) {e.printStackTrace();}
Thread th = new Thread(this); //
制作新线程
th.start(); //
开始线程
}
protected void paint(Graphics g) {
g.setColor(225, 255, 255); // 白色
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 0, 0); // 黑色
g.drawString("Monkey moving!",10,20,0);
g.drawImage(monkey,x,y, Graphics.HCENTER | Graphics.VCENTER );
}
public void run() {
while (true){
y++;
x-=2;
if(x < 0)x = getWidth();
if(y > getHeight()) y = 0;
repaint();
try{
Thread.sleep(100); //100毫秒待机
}catch(InterruptedException e){}
}
}
}
========================================
2006年5月3日
今天晚上再重新运行一遍竟然就成功了,什么都没改,还真他娘不知道怎么回事……
看造化了。
下面是调整后的代码:
==========
ok3.java
==========
ok3.java
==========
package ok3;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class ok3 extends MIDlet {
private Canvas canvas;
private Display display;
private Display display;
public void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
canvas = new ok3Displayable();
display.setCurrent(canvas);
}
public void pauseApp() {}
public void destroyApp(boolean bool) throws MIDletStateChangeException {
}
}
display = Display.getDisplay(this);
canvas = new ok3Displayable();
display.setCurrent(canvas);
}
public void pauseApp() {}
public void destroyApp(boolean bool) throws MIDletStateChangeException {
}
}
=====================
ok3Displayable.java
=====================
ok3Displayable.java
=====================
package ok3;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class ok3Displayable extends Canvas implements Runnable{
private Image[] monkey;
private int x = 20;//x坐标
private int y = 120;//y坐标
private int x = 20;//x坐标
private int y = 120;//y坐标
public ok3Displayable(){
try {
monkey = new Image[2];
monkey[0] = Image.createImage("/ohyeah.png");
monkey[1] = Image.createImage("/back.png");
}
catch(IOException e) {e.printStackTrace();}
try {
monkey = new Image[2];
monkey[0] = Image.createImage("/ohyeah.png");
monkey[1] = Image.createImage("/back.png");
}
catch(IOException e) {e.printStackTrace();}
Thread th = new Thread(this);//制作新线程
th.start();//开始线程
}
protected void paint(Graphics g) {
g.setColor(225, 255, 255); // red
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(monkey[1],0,0, Graphics.LEFT | Graphics.TOP );
g.drawImage(monkey[0],x,y, Graphics.HCENTER | Graphics.VCENTER );
}
public void run() {
while (true){
y++;
x-=2;
if(x < 0)x = getWidth();
if(y > getHeight()) y = 0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedException e){}
}
}
}
th.start();//开始线程
}
protected void paint(Graphics g) {
g.setColor(225, 255, 255); // red
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(monkey[1],0,0, Graphics.LEFT | Graphics.TOP );
g.drawImage(monkey[0],x,y, Graphics.HCENTER | Graphics.VCENTER );
}
public void run() {
while (true){
y++;
x-=2;
if(x < 0)x = getWidth();
if(y > getHeight()) y = 0;
repaint();
try{
Thread.sleep(100);//100毫秒待机
}catch(InterruptedException e){}
}
}
}