Thread 多线程的使用案例-简单

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();
		}

	}

}

猜你喜欢

转载自sunzone.iteye.com/blog/1848118
今日推荐