📄 drawcanvas.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 + -