import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
//J2ME 中的多线程
// 在MIDP 应用设计中,如果遇到了复杂设计或者需要较长时间的操作,都可以
//使用多线程;
/*
比如应用程序连接网络,获取数据可能需要较长时间,
这时可以利用多线程技术允许用户同时进行其他操作,或者设计一个动画屏幕,
提示正在进行连网操作,这是很重要的,
否则用户无从知道应用程序的工作状态。
*
*
*/
//简单的线条动画
public class LineThread extends Canvas implements Runnable,CommandListener {
// 线长度
int lineSize = 1;
//创建一个命令
private Command startCommand = new Command("Start Game",Command.OK,1);
//初始化线程
private Thread thread;
MIDlet midlet;
//构造方法
public LineThread(MIDlet midlet){
this.midlet = midlet;
//为当前的类 , 添加一个命令
addCommand(startCommand);
//添加监听器
setCommandListener(this);
}
public void run() {
// TODO Auto-generated method stub
// 线条增长到顶点停止
while(true){
if(lineSize>getHeight()){
break;
}
lineSize+=10;
try{
//线程暂停
Thread.sleep(130);
//重绘事件
repaint();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
protected void paint(Graphics g) {
// TODO Auto-generated method stub
// g.setColor(255, 255, 255);
// g.fillRect(0, 0, this.getWidth(), this.getHeight());
//线条
g.setColor(0xff0000);
//g.drawLine(this.getWidth()/2, getHeight(), getWidth()/2, this.getHeight()-lineSize);
//画三角形
//g.fillTriangle(0, 0, 0, lineSize, lineSize, 0); //画布遮盖
//三角形向两侧遮盖
// g.fillTriangle(this.getWidth()/2, this.getHeight()/2,getWidth()/2-lineSize,getHeight()/2,getWidth()/2,getHeight()/2-lineSize );
// g.fillTriangle(this.getWidth()/2, this.getHeight()/2,getWidth()/2,getHeight()/2+lineSize,getWidth()/2+lineSize,getHeight()/2);
//网格线
g.drawLine(getWidth()/2, getHeight(), getWidth()/2, 0);
g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2);
g.setStrokeStyle(Graphics.SOLID); //实线
g.setStrokeStyle(Graphics.DOTTED); //虚线
g.drawLine(getWidth()/2-lineSize, getHeight()/2, getWidth()/2, getHeight()/2-lineSize);
g.drawLine(getWidth()/2+lineSize, getHeight()/2, getWidth()/2, getHeight()/2-lineSize);
g.drawLine(getWidth()/2-lineSize, getHeight()/2, getWidth()/2, getHeight()/2+lineSize);
g.drawLine(getWidth()/2+lineSize, getHeight()/2, getWidth()/2, getHeight()/2+lineSize);
//计时器
g.setColor(0x0000ff);
g.drawString(Long.toString(System.currentTimeMillis()), 2, 2, Graphics.TOP|Graphics.LEFT);
}
//根据命令的选择启动线程
public void commandAction(Command c, Displayable d) {
// TODO Auto-generated method stub
if(c==startCommand){
thread=new Thread(this);
thread.start();
}
}
}