maincanvas.java

来自「< JavaME核心技术最佳实践>>的全部源代码」· Java 代码 · 共 96 行

JAVA
96
字号
package com.j2medev.chapter3;

import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.rms.RecordStore;

public class MainCanvas extends Canvas implements Runnable {
    //在内存中存储方块的x,y值
    private int x = 0;
    private int y = 0;
    public static final int WIDTH = 20;
    public static final int FRAME_LENGTH = 2500;
    private Random random = new Random();
    private Thread t = null;
    //是否为重新启动
    private boolean restart = false;
    private boolean stopped = false;
    //方便MainCanvas回调midlet的pauseApp()方法
    private LifeMIDlet midlet = null;
    
    public MainCanvas(LifeMIDlet midlet) {
        this.midlet = midlet;
        x = getWidth()/2;
        y = getHeight()/2;
        t = new Thread(this);
        t.start();
    }
    //设置是否是中断后重新启动
    public void setRestart(boolean flag){
        restart = flag;
    }
    public void release(){
        stopped = true;
        t = null;
    }
    
    public void restart(){
        stopped = false;
        t = new Thread(this);
        t.start();
    }
    
    public void run(){
        //如果是从中断中恢复,让计时器线程休眠1秒后再执行
        //确保用户能看到中断前的界面
        if(restart){
            try {
                t.sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
        while(!stopped){
            long t1 = System.currentTimeMillis();
            beep();
            repaint();
            serviceRepaints();
            long t2 = System.currentTimeMillis();
            if(t2 - t1 < FRAME_LENGTH){
                try{
                    Thread.sleep(FRAME_LENGTH + t1 - t2);
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        }
        System.out.println("The value of x,y is saved as ("+x+","+y+")");
    }
    
    private void beep(){
        //随即更新x,y值
        x =( random.nextInt()>>>1)%(getWidth()-WIDTH);
        y = (random.nextInt()>>>1)%(getHeight()-WIDTH);
    }
    public void paint(Graphics g){
        System.out.println("("+x+","+y+")");
        g.setColor(0xFFFFFF);
        g.fillRect(0,0,getWidth(),getHeight());
        g.setColor(0,128,128);
        g.drawString("("+x+","+y+")",0,0,Graphics.LEFT|Graphics.TOP);
        g.fillRect(x, y, WIDTH,WIDTH);
    }
    
    public void showNotify(){
        
    }
    
    public void hideNotify(){
    //针对Nokia 7610的处理,nokia 7610不会调用pauseApp()。
//#if DefaultColorPhone
//#     midlet.pauseApp();
//#endif
    }
}

⌨️ 快捷键说明

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