LPProgressThread.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:4k
源码类别:

J2ME

开发平台:

Java

  1. /**
  2.  * <p>Title: lipeng</p>
  3.  * <p>Description:
  4.  * You cannot remove this copyright and notice.
  5.  * You cannot use this file without the express permission of the author.
  6.  * All Rights Reserved</p>
  7.  * <p>Copyright: lizhenpeng (c) 2004</p>
  8.  * <p>Company: LP&P</p>
  9.  * @author lizhenpeng
  10.  * @version 1.0.3
  11.  * <p>
  12.  * Revise History
  13.  * 2004.07.15 In MobilePhone the progress time too small change to 300 v1.0.1
  14.  * 2004.07.15 Change thread's priority to min_priority V1.0.2
  15.  * 2004.07.21 Change some public member to private V1.0.3
  16.  * </p>
  17.  */
  18. package lipeng;
  19. import javax.microedition.lcdui.*;
  20. import javax.microedition.midlet.MIDlet;
  21. public class LPProgressThread extends Canvas
  22.   implements Runnable
  23. {
  24.   public LPProgressThread(MIDlet midlet)
  25.   {
  26.     //setFullScreenMode(true);
  27.     loadProgressIsOver = false;
  28.     this.midlet = midlet;
  29.     this.width = this.getWidth();
  30.     this.height = this.getHeight();
  31.   }
  32.   public void paint(Graphics g)
  33.   {
  34.     drawGaugeScreen(g);
  35.   }
  36.   private void drawGaugeScreen(Graphics g)
  37.    {
  38.      g.setColor(255,255,255);
  39.      g.fillRect(0,0,width,height);
  40.      g.setColor(255,0,0);
  41.      g.drawString("游戏装载中...",(width-font.stringWidth("游戏装载中..."))/2+10,
  42.                   height/2-25,g.LEFT|g.TOP);
  43.      g.setColor(255,0,0);
  44.      g.drawRect(10,height/2,width-20,20);
  45.      g.setColor(0,0,255);
  46.      g.fillRect(10+1,height/2+1,gaugeCnt*(width-20)/PROGRESS_END-1,20-1);
  47.      g.setColor(255,0,0);
  48.      g.drawString(String.valueOf(gaugeCnt*100/PROGRESS_END),(width-font.stringWidth("000"))/2,
  49.                   height/2+4,g.LEFT|g.TOP);
  50.      g.drawString("%",(width-font.stringWidth("000"))/2+font.stringWidth("00"),
  51.                   height/2+4,g.LEFT|g.TOP);
  52.    }
  53.   public void run()
  54.   {
  55.     try
  56.    {
  57.      Thread currentThread = Thread.currentThread();
  58.      while (currentThread == progressThread)
  59.      {
  60.        startTime = System.currentTimeMillis();
  61.        repaint(0, 0, width, height);
  62.        serviceRepaints();
  63.        gaugeCnt += progressInterval;
  64.        if(((LPIGetCanvas)midlet).getCanvas()!=null)
  65.        {
  66.          progressInterval +=1;
  67.        }
  68.        if(gaugeCnt>=PROGRESS_END)
  69.        {
  70.          if(((LPIGetCanvas)midlet).getCanvas()==null)
  71.          {
  72.            gaugeCnt -= progressInterval;
  73.          }
  74.          else
  75.          {
  76.            loadProgressIsOver=true;
  77.            Display.getDisplay(midlet).setCurrent(((LPIGetCanvas)midlet).
  78.                                                  getCanvas());
  79.            ((LPIGameStart)((LPIGetCanvas)midlet).getCanvas()).start();
  80.            break;
  81.          }
  82.        }
  83.        endTime = System.currentTimeMillis();
  84.        if ( (endTime - startTime) < FRAME_TIME)
  85.        {
  86.          Thread.sleep(FRAME_TIME - (endTime - startTime));
  87.        }
  88.      }
  89.    }
  90.    catch (InterruptedException ie)
  91.    {
  92.      System.out.println(ie.toString());
  93.    }
  94.   }
  95.   public void start()
  96.   {
  97.     progressThread = new Thread(this);
  98.     progressThread.setPriority(Thread.MIN_PRIORITY+1);
  99.     progressThread.start();
  100.   }
  101.   public void stop()
  102.   {
  103.     progressThread = null;
  104.   }
  105.   public boolean loadProgressIsOver = false;
  106.   private volatile Thread progressThread = null;
  107.   private int width;
  108.   private int height;
  109.   private long startTime;
  110.   private long endTime;
  111.   private static final int FRAME_TIME = 200;
  112.   private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
  113.                                    Font.SIZE_LARGE);
  114.   public int gaugeCnt;
  115.   private int progressInterval = 1;
  116.   private static final int PROGRESS_END=150;
  117.   private MIDlet midlet;
  118. }