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

本文探讨了在MIDP应用中如何使用多线程技术实现复杂的动画效果,具体以线条动画为例,展示如何通过多线程避免用户等待,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值