progressthread.java

来自「一个J2ME的RPG游戏」· Java 代码 · 共 101 行

JAVA
101
字号

import javax.microedition.lcdui.*;

public class ProgressThread extends Canvas implements Runnable {
    public boolean loadProgressIsOver = false;
    private volatile Thread progressThread = null;
    private int width;
    private int height;
    private long startTime;
    private long endTime;
    private static final int FRAME_TIME = 200;
    private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
                                     Font.SIZE_LARGE);

    public int gaugeCnt = 0;
    private int progressInterval = 1;
    private static final int PROGRESS_END = 150;
    private RPGMidlet midlet;

    public ProgressThread(RPGMidlet midlet) {
        loadProgressIsOver = false;
        this.midlet = midlet;
        this.width = this.getWidth();
        this.height = this.getHeight();
    }

    protected void paint(Graphics g) {
        drawGaugeScreen(g);
    }

    private void drawGaugeScreen(Graphics g) {
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, width, height);

        g.setColor(255, 0, 0);
        g.drawString("游戏装载中...",
                     (width - font.stringWidth("游戏装载中...")) / 2 + 10,
                     height / 2 - 25, g.LEFT | g.TOP);

        g.setColor(255, 0, 0);
        g.drawRect(10, height / 2, width - 20, 20);
        g.setColor(0, 0, 255);
        g.fillRect(10 + 1, height / 2 + 1,
                   gaugeCnt * (width - 20) / PROGRESS_END - 1, 20 - 1);

        g.setColor(255, 0, 0);

        g.drawString(String.valueOf(gaugeCnt * 100 / PROGRESS_END),
                     (width - font.stringWidth("000")) / 2,
                     height / 2 + 4, g.LEFT | g.TOP);
        g.drawString("%",
                     (width - font.stringWidth("000")) / 2 +
                     font.stringWidth("00"),
                     height / 2 + 4, g.LEFT | g.TOP);
    }

    public void start() {
        progressThread = new Thread(this);
        progressThread.setPriority(Thread.MIN_PRIORITY + 1);
        progressThread.start();
    }

    public void run() {
        try {
            Thread currentThread = Thread.currentThread();
            while (currentThread == progressThread) {
                startTime = System.currentTimeMillis();
                repaint(0, 0, width, height);
                serviceRepaints();
                gaugeCnt += progressInterval;
                if (((RPGMidlet) midlet).getCanvas() != null) {
                    progressInterval += 1;
                }
                if (gaugeCnt >= PROGRESS_END) {
                    if (((RPGMidlet) midlet).getCanvas() == null) {
                        gaugeCnt -= progressInterval;
                    } else {
                        loadProgressIsOver = true;
                        Display.getDisplay(midlet).setCurrent(((RPGMidlet)
                                midlet).
                                getCanvas());
                        ((RPGCanvas) ((RPGMidlet) midlet).getCanvas()).
                                start();
                        break;
                    }
                }
                endTime = System.currentTimeMillis();
                if ((endTime - startTime) < FRAME_TIME) {
                    Thread.sleep(FRAME_TIME - (endTime - startTime));
                }
            }
        } catch (InterruptedException ie) {
            System.out.println(ie.toString());
        }
    }

    public void stop() {
        progressThread = null;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?