本文介绍如何将手机屏幕的内容存储为Image对象,这里认为手机屏幕上显示的是一个Canvas。完成这一个功能的思想就是使用缓冲机制。
我们不能直接获得Canvas上的像素,因此不能直接从Canvas上的内容获得Image对象。转换一下思路,如果把要绘制的Canvas上的内容首先 绘制到一个Image上,而这个Image并不显示到屏幕上,只是在绘画完成后一次性的显示到屏幕上。有经验的朋友一定联想到了双缓冲机制,不过这里并不 是要使用双缓冲解决闪屏的问题,而是要得到当前Canvas的内容。
下面我们编写一个简单的Canvas类来测试一下这个想法,SimpleCanvas是Canvas的子类,为了保存Canvas的内容,我们创建一个Image,大小与Canvas的尺寸相当。
/*
* 显示一个Alert的屏幕
*/
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class TextBox_Alert extends MIDlet implements CommandListener {
private Command exitCommand,alertCommand;
private TextBox tb;
public TextBox_Alert() {
exitCommand = new Command("Exit", Command.EXIT, 1);
alertCommand = new Command("Alert", Command.SCREEN, 1);
tb = new TextBox("Alert MIDlet", "Alert Example!", 15, 0);
tb.addCommand(exitCommand);
tb.addCommand(alertCommand);
tb.setCommandListener(this);
}
protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(tb);
}
protected void pauseApp() {
}
protected void destroyApp(boolean arg0){
}
public void commandAction(Command c, Displayable d) {
if(d == tb && c == alertCommand){
Image img;
try{
img = Image.createImage("/Icon.png");
}
catch(java.io.IOException e){
img = null;
}
Alert info = new Alert("Alert","This is a Alert Example!",img ,AlertType.INFO);
info.setTimeout(Alert.FOREVER);
//Display.getDisplay(this).setCurrent(info,tb);
Display.getDisplay(this).setCurrent(info);
}
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class PhotoMIDlet extends MIDlet implements CommandListener
{
String list1[]={"1","2","3"};
private Command okCommand=new Command("确定",Command.OK,1);
private Command backCommand=new Command("返回",Command.BACK,1);
private Command exitCommand=new Command("退出",Command.EXIT,1);
private List list2=new List("Photo",List.EXCLUSIVE,list1,null);
private Display display=null;
private Form form=new Form("Photo");
private Image img=null;
public PhotoMIDlet(){
list2.addCommand(okCommand);
list2.addCommand(exitCommand);
list2.addCommand(backCommand);
list2.setCommandListener(this);
form.addCommand(okCommand);
form.addCommand(exitCommand);
form.addCommand(backCommand);
form.setCommandListener(this);
}
public void startApp(){
if(display==null)
display=Display.getDisplay(this);
display.setCurrent(list2);
}
public void pauseApp(){
}
public void destroyApp(boolean unkown){
}
public void commandAction(Command cmd,Displayable dis){
if(cmd==okCommand){
int sIn=list2.getSelectedIndex();
String str=(String)list2.getString(sIn);
try{
img=Image.createImage("/"+str+".png");
}catch(Exception e){}
form.append(img);
display.setCurrent(form);
}
else if(cmd==backCommand){
form.deleteAll();
display.setCurrent(list2);
}
else if(cmd==exitCommand){
destroyApp(true);
notifyDestroyed();
}
}
}
我的邮箱是新浪的,发邮件时需要SMTP验证,用下面的文件JavaMail.html与JavaMail.jsp发送成功!
(环境:Tomcat 5.016,需要的包是mail.jar和activation.jar,放到你的WEB应用程序的WEB-INF/lib目录下)
JavaMail.html收集信息
<html>
<head>
<title>JavaMail.html</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
</head>
<body>
<h2>利用JavaMail来发送电子邮件 - HTML格式</h2>
<form name="SendMessage" Method="post" action="JavaMail.jsp" >
<p>寄信人:<input type="text" name="From" size="30" maxlength="30"></p>
<p>收信人:<input type="text" name="To" size="30" maxlength="30"></p>
<p>主题:<input type="text" name="Subject" size="30" maxlength="30"></p>
<p>格式:<select name="Type" size="1">
<option value="text/plain">Text</option>
<option value="text/html">HTML</option>
</select></p>
<p>内容:</p><p><textarea name="Message" cols=40 rows=5></textarea></p>
<input type="submit" value="发送">
<input type="reset" value="重填">
</form>
</body>
</html>
这是我从网上看一遍文章做的练习。自解压程序是 ZipSelfExtractor.java(请下载),作者为 Z.S. Jin。
一、自解压jar文件的优点: 自解压jar文件可以在任意支持java的平台上解开。
二、 制作自解压jar文件的过程如下:
1、修改MANIFEST.MF文件
随便找一个jar格式的文件,如jstl.jar,先用winzip或winRAR解压,这是因为我们要修改其中的MANIFEST.MF文件。其实修改 很简单,只要在MANIFEST.MF文件中指定(或修改)这个基于java 的解压程序包含main()方法的类的名称为:
Main-Class: ZipSelfExtractor
如将jstl.jar文件中包含的MANIFEST.MF文件:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.2
Created-By: 1.4.1_02-b06 (Sun Microsystems Inc.)
Specification-Title: JavaServer Pages Standard Tag Library (JSTL)
Specification-Version: 1.1
Implementation-Title: JavaServer Pages Standard Tag Library API Refere
nce Implementation
Implementation-Version: 1.1.0-D13
Implementation-Vendor: Sun Microsystems, Inc.
Implementation-Vendor-Id: com.sun
Extension-Name: javax.servlet.jsp.jstl
假设你的属性文件Proxool.properties中有数据库配置信息:
jdbc-0.proxool.alias=Access
jdbc-0.proxool.driver-class=sun.jdbc.odbc.JdbcOdbcDriver
jdbc-0.proxool.driver-url=jdbc:odbc:cwb
jdbc-0.proxool.maximum-connection-count=20
jdbc-0.proxool.prototype-count=4
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-0.proxool.verbose=true
jdbc-0.proxool.statistics=10s,1m,1d
jdbc-0.proxool.statistics-log-level=ERROR
我想把一个基于数据库的WEB应用程序加上缓存,以提高性能,开源的java缓存系统不少,先拿JCS( Java Caching System)试试。
关于JCS的介绍,小红帽的文章已写得非常清楚了,附后。
先到http://jakarta.apache.org/jcs/Downloads.html
下载jcs-1.2.6.jar,找了半天也没有找到它的源码和API文档,不知为什么?
在这个站点有: Using JCS: Some basics for the web ,不错,就用它练习。
一、创建值对象
假设有一BOOK,它在数据库中的表为:
Table BOOK
BOOK_ID_PK
TITLE
AUTHOR
ISBN
PRICE
PUBLISH_DATE
在数据库应用程序中,数据库连接的取得是一个耗费时间的动作,为了避免花费时间在连接的取得与关闭上,我们会将连接资源放置在一个池中,需要连接时就从池中取得,不需要连接时就将之放回池中,以求重复利用连接,连接池也担任连接数量、连接时间的控制等等动作。
Proxool 是一个开放源码的连接池,在使用与设置上都十分的方便,Proxool 最新的版本是0.8.3,您可以在以下的网址下载:http://proxool.sourceforge.net/index.html
网站上的User Guide提供相当简单的入门文件,您可以直接先从这些文件开始下手,而下面这个实例提供您一个快速入门的范例,让您知道如何通过Proxool取得数据库连接,这里所使用的是MySQL数据库。
NetBeans是新近才风光的IDE工具,真的不错啊! 在我的笔记本上比 eclipse快点,希望以后的版本运行越来越快。
一、下载和安装
先到这里下载NetBeans 4.1简体中文版:
http://www.techtarget.com.cn/netbeans/index3.htm。
下载的文件名为:netbeans-4_1-windows-ml_ja_zh_CN.exe。
安装很简单,和一般的安装程序一样,多点几次下一步就可
完成任务,我将netbeans-4_1安装到了d:\netbeans41。
<project basedir="." default="usage" name="myceaas">
<target name="init">
<property name="Name" value="myceaas" />
<property name="name" value="myceaas" />
<property name="version" value="0.2" />
<property name="year" value="2006" />
<echo message="----------- ${Name} ${version} [${year}] ------------" />
<property name="debug" value="off" />
<property name="optimize" value="on" />
<property name="deprecation" value="on" />
<!--<property name="mycedatasycn.location" value="D:/project/myce/mycedatasycn" />-->
<!-- java源文件路径 -->
<property name="src.dir" value="${basedir}/src" />
<!-- jar包路径 -->
<property name="lib.dir" value="${basedir}/myceaas/WEB-INF/lib" />
<!-- webapp路径 -->
<property name="webapp.dir" value="${basedir}/myceaas" />
<property name="packages" value="com.ce.myceaas.*" />
<!-- 准备源文件路径 -->
<property name="build.src" value="${basedir}/AntBuild/build" />
<!-- 编译源文件路径 -->
<property name="build.dest" value="${basedir}/AntBuild/bin" />
<!-- 准备webapp文件路径 -->
<property name="buildwar.dest" value="${basedir}/AntBuild/warsrc" />
<!-- 准备javadoc文件路径 -->
<property name="build.javadocs" value="${basedir}/AntBuild/doc" />
<!-- 打包jar文件路径 -->
<property name="jar.dest" value="${basedir}/AntBuild/jar" />
<!-- 打包war文件路径 -->
<property name="war.dest" value="${basedir}/AntBuild/war" />
<!-- resin-home路径 -->
<property name="resin.home" value="C:\resin-pro-3.0.17"/>
<!-- tomcat-home路径 -->
<property name="tomcat.home" value="C:\tomcat5.5.12"/>
<property name="j2eelib.dir" value="C:/Program Files/MyEclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_3.9.210/data/libraryset/1.4" />
<!-- classpath -->
<path id="classpath">
<fileset dir="${j2eelib.dir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<!--<pathelement location="lib/"/>-->
</path>
<filter token="year" value="${year}" />
<filter token="version" value="${version}" />
<filter token="date" value="${TODAY}" />
<filter token="log" value="true" />
<filter token="verbose" value="true" />
</target>
<!-- =================================================================== -->
<!-- Help on usage -->
<!-- =================================================================== -->
<target name="usage" depends="init">
<echo message="${Name} Build file" />
<echo message="-------------------------------------------------------------" />
<echo message="" />
<echo message=" available targets are:" />
<echo message="" />
<echo message=" jar --> generates the ${name}.jar file" />
<echo message=" build --> compiles the source code" />
<echo message=" javadoc --> generates the API documentation" />
<echo message=" clean --> cleans up the directory" />
<echo message="" />
<echo message=" Please rename build.properties.default to build.properties" />
<echo message=" and edit build.properties to specify JSDK 2.3 classpath." />
<echo message="" />
<echo message=" See the comments inside the build.xml file for more details." />
<echo message="-------------------------------------------------------------" />
<echo message="" />
<echo message="" />
</target>
<!-- =================================================================== -->
<!-- 准备源文件-->
<!-- =================================================================== -->
<target name="prepare-src" depends="init">
<!-- create directories -->
<mkdir dir="${build.src}" />
<mkdir dir="${build.dest}" />
<mkdir dir="${jar.dest}" />
<mkdir dir="${war.dest}" />
<mkdir dir="${buildwar.dest}" />
<!-- copy src files -->
<copy todir="${build.src}">
<fileset dir="${src.dir}" />
</copy>
<copy todir="${buildwar.dest}">
<fileset dir="${webapp.dir}" />
</copy>
</target>
<!-- =================================================================== -->
<!-- 编译源文件-->
<!-- =================================================================== -->
<target name="build" depends="prepare-src">
<javac srcdir="${build.src}" destdir="${buildwar.dest}/WEB-INF/classes" debug="${debug}" optimize="${optimize}">
<classpath refid="classpath" />
</javac>
<copy todir="${buildwar.dest}/WEB-INF/classes">
<fileset dir="${build.src}" >
<include name="**/*.xml"/>
</fileset>
</copy>
</target>
<!-- =================================================================== -->
<!-- 打war包-->
<!-- =================================================================== -->
<target name="myceaas.war" depends="build">
<war warfile="${war.dest}/myceaas.war" webxml="${buildwar.dest}/WEB-INF/web.xml">
<lib dir="${buildwar.dest}/WEB-INF/lib"/>
<classes dir = "${buildwar.dest}/WEB-INF/classes"/>
<fileset dir="${buildwar.dest}">
</fileset>
</war>
</target>
<!-- =================================================================== -->
<!-- 发布到本的resin和tomcat-->
<!-- =================================================================== -->
<target name="publish" depends="myceaas.war,clean">
<copy todir="${resin.home}/webapps">
<fileset dir="${war.dest}" >
<include name="**/*.war"/>
</fileset>
</copy>
<copy todir="${tomcat.home}/webapps">
<fileset dir="${war.dest}" >
<include name="**/*.war"/>
</fileset>
</copy>
</target>
<!--
<target name="SyncMain">
<java classname="com.ce.synchronization.main.SyncMain" failonerror="true" fork="yes">
<classpath refid="classpath"/>
</java>
</target>
-->
<!-- =================================================================== -->
<!-- 产生javadoc api 文档-->
<!-- =================================================================== -->
<target name="javadoc" depends="build">
<mkdir dir="${build.javadocs}" />
<javadoc packagenames="${packages}" sourcepath="${build.src}" destdir="${build.javadocs}" author="true" version="true" use="true" splitindex="true" windowtitle="${Name} API" doctitle="${Name}">
<classpath refid="classpath" />
</javadoc>
</target>
<!-- =================================================================== -->
<!-- 清除临时文件-->
<!-- =================================================================== -->
<target name="clean" depends="init">
<delete dir="${build.src}"/>
<delete dir="${build.dest}/org"/>
<delete dir="${build.dest}/com"/>
<delete dir="${buildwar.dest}"/>
<delete>
<fileset dir="${build.dest}" includes="**/*.class"/>
</delete>
</target>
</project>
