⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawcanvas.java

📁 几个不错的手机程序例子
💻 JAVA
字号:
/*
 * DrawCanvas.java
 *
 * Copyright 2001 SkyArts. All Rights Reserved.
 */
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;

/**
 * 从网络读取图片的Canvas类
 *
 * @author  Hideki Yonekawa
 * @version 1.0
 */
class DrawCanvas extends Canvas implements  CommandListener, Runnable {
	/** 存放画面宽度的变量 */
	private int					screenWidth;
	/** 存放画面高度的变量 */
	private int					screenHeight;

	/** 存放NetworkTestImg对象--MIDlet的变量 */
	private NetworkTestImg		networkTest;

	/** Exit指令变量 */
	private Command				exitCmd			= new Command("Exit", Command.SCREEN, 5);

	/** 存放图像的URL之变量 */
	private String				url;

	/** 存放取得Image对象之变量 */
	private Image				img					= null;

	/** 存放从网络取得资源最值的常量 */
	private static int			MAX_LENGTH			= 10240;

	/** 存放画面显示用字符串的变量 */
	private String				drawSt				= null;

	/** 构造函数 */
	DrawCanvas(NetworkTestImg networkTest, String url) {
		this.networkTest = networkTest;
		this.url = url;

		//取得宽度与高度
		screenWidth = getWidth();
		screenHeight = getHeight();

		//从网络读取图像文件
		new Thread(this).start();

		addCommand(exitCmd);
		//登录Command listeners
		setCommandListener(this);
	}

	public void run() {
		HttpConnection connection = null;
		try {
			//执行连接
			connection = (HttpConnection)Connector.open(this.url);
			if(connection.getResponseCode() == HttpConnection.HTTP_OK) {
			//当HTTP的响应状态码为OK(200)
				if(connection.getLength() <= MAX_LENGTH) {
				//当下载的资源大小小于最大值上限时
					InputStream in = null;
					try {
						//流打开并开始读取
						in = connection.openInputStream();
						ByteArrayOutputStream byteArrayOutS = new ByteArrayOutputStream();
						byte[] readByte = new byte[1024];
						int readLeng;
						while((readLeng = in.read(readByte, 0, readByte.length)) != -1) {
						//读取处理
							byteArrayOutS.write(readByte, 0, readLeng);
						}
						//基于读进来的位数组来建立Image对象
						img = Image.createImage(byteArrayOutS.toByteArray(),
												0,
												byteArrayOutS.size());
					}catch(Exception e) {
						drawSt = e.toString();
						repaint();
					}finally {
						if(in != null) {
							in.close();
						}
					}
				}else {
				//档案超过最大值
					drawSt = "档案太大了";
				}
			}else {
			//当URL无效时
				drawSt = "URL无效";
			}
		}catch(Exception e) {
		//当URL无效时
			drawSt = e.toString();
			repaint();
		}finally {
			if(connection != null) {
				try {
					connection.close();
				}catch(Exception ex) {}
			}
		}
		repaint();
	}


	/**
	 * 描绘用的方法。通常不会直接由自己类来调用
	 * @param	g	Graphics对象
	 */
	protected void paint(Graphics g) {
		//背景涂白
		g.setColor(0x00FFFFFF);
		g.fillRect(0, 0, screenWidth, screenHeight);

		if(img != null) {
		//当有图片时
			g.drawImage(img, 0, 0, Graphics.TOP|Graphics.LEFT);
		}else {
			g.setColor(0x00000000);
			if(drawSt != null) {
				g.drawString(drawSt, 0, 0, Graphics.TOP|Graphics.LEFT);
			}else {
				g.drawString("loading...", 0, 0, Graphics.TOP|Graphics.LEFT);
			}
		}
	}

	/** 指令的事件发生时所调用的方法 */
	public void commandAction(Command c, Displayable s) {
		if(c == exitCmd) {//EXIT指令
			//调用NetworkTestImg类的doExit方法,并结束MIDlet
			networkTest.doExit();
		}
	}
}

⌨️ 快捷键说明

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