欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-02 19:31:37
...
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();
		}

	}

}