??xml version="1.0" encoding="utf-8" standalone="yes"?>
1Q什么都别说Q先跟着我来做一?br>我们先找一个目录,比如C:\myjob
然后我们建立两个目录Q一个叫做srcQ一个叫做bin
C:\myjob>md src
C:\myjob>md bin
C:\myjob>dir
驱动?C 中的h LIGHTNING
L序列h 3DD1-83D9
C:\myjob 的目?br>2005-12-25 14:33 <DIR> .
2005-12-25 14:33 <DIR> ..
2005-12-25 14:34 <DIR> src
2005-12-25 14:34 <DIR> bin
0 个文?nbsp; 0 字节
4 个目?nbsp; 305,123,328 可用字节
C:\myjob>
然后我们在src目录中去写程?br>C:\myjob>cd src
C:\myjob\src>
我们写这?个java文g
////A.java
package com.lightning;
public class A{
{System.out.println("com.lightning.A");}
}
////B.java
package com.lightning;
public class B{
{System.out.println("com.lightning.B");}
}
////C.java
package com;
public class C{
{System.out.println("com.C");}
}
////Test.java
package net.test;
import com.lightning.*;
import com.*;
public class Test{
public static void main(String[] args)
{
new A();new B();new C();
System.out.println("net.test.Test");
}
}
写好之后是q样
C:\myjob\src>dir
驱动?C 中的h LIGHTNING
L序列h 3DD1-83D9
C:\myjob\src 的目?/p>
2005-12-25 14:34 <DIR> .
2005-12-25 14:34 <DIR> ..
2005-12-25 14:39 86 A.java
2005-12-25 14:40 86 B.java
2005-12-25 14:42 194 Test.java
2005-12-25 14:43 68 C.java
4 个文?nbsp; 434 字节
2 个目?nbsp; 305,106,944 可用字节
然后我们建立com目录Qcom\lightning\目录Qnet\test\目录
C:\myjob\src>md com
C:\myjob\src>md com\lightning
C:\myjob\src>md net\test\
我们Test.java攑օnet\test\中去
A.javaQB.java攑օcom\lightning\中去
C.java攑օcom\中去
C:\myjob\src>move Test.java net\test\
C:\myjob\src>move A.java com\lightning\
C:\myjob\src>move B.java com\lightning\
C:\myjob\src>move C.java com\
然后我们在c:\myjobs中发令:
C:\myjob\src>cd ..
C:\myjob>javac -sourcepath src -d bin src\net\test\Test.java
然后我们看看bin目录中多了什?br>C:\myjob>dir bin /s
驱动?C 中的h LIGHTNING
L
C:\myjob\bin 的目?/p>
2005-12-25 14:34 <DIR> .
2005-12-25 14:34 <DIR> ..
2005-12-25 14:46 <DIR> net
2005-12-25 14:46 <DIR> com
0 个文?nbsp; 0 字节
C:\myjob\bin\net 的目?/p>
2005-12-25 14:46 <DIR> .
2005-12-25 14:46 <DIR> ..
2005-12-25 14:46 <DIR> test
0 个文?nbsp; 0 字节
C:\myjob\bin\net\test 的目?/p>
2005-12-25 14:46 <DIR> .
2005-12-25 14:46 <DIR> ..
2005-12-25 14:46 520 Test.class
1 个文?nbsp; 520 字节
C:\myjob\bin\com 的目?/p>
2005-12-25 14:46 <DIR> .
2005-12-25 14:46 <DIR> ..
2005-12-25 14:46 <DIR> lightning
2005-12-25 14:46 338 C.class
1 个文?nbsp; 338 字节
C:\myjob\bin\com\lightning 的目?/p>
2005-12-25 14:46 <DIR> .
2005-12-25 14:46 <DIR> ..
2005-12-25 14:46 354 A.class
2005-12-25 14:46 354 B.class
2 个文?nbsp; 708 字节
所列文件L:
4 个文?nbsp; 1,566
14 个目?nbsp; 305,057,792 可用字节
然后我们执行Q同样在c:\myjobs\下发?br>C:\myjob>java -cp bin net.test.Test
com.lightning.A
com.lightning.B
com.C
net.test.Test
2Q从实践到理?/p>
刚才我用一个非常简单但是非常完整的例子l大家演CZjava的package机制?br>Z么以前脑里面那么简单的javac会搞得这么复杂呢Q?/p>
实际上它本就q么复杂Q?br>q不是一?javaQ一行javac一个当前目录中的classq么单?/p>
首先我要打破一些东西,然后才好建立一些东ѝ?br>javacq只是l一?java~译一个class的。javac自带有make机制Q也是_如果?br>javac的参Cjava文g使用到的Mc,javac首先会去扑֯q个cȝclass文g存在与否
Q如果不存在Q就会在sourcepath中找L代码文g来编译?/p>
什么是sourcepath呢?sourcepath是javac的一个参敎ͼ如果你不加指定,那么sourcepath
是classpath?/p>
比如我们装好jdk之后Q我说过不要讑֮classpath环境变量Q因为大部分Z旦设定了
classpathQ不是多此一举把什么dt.jar放进厅R(我可以好好打M一下,告诉你一个可
悲的事实——jre永远不会从你q个classpath中去Ldt.jar。你完全是徒劳的Q)是
?."搞不见了Q搞得是h一盆盆的往自己w上|脑袋一点点的涨大?/p>
不要设!classpath没有你想象中那么普适和强大Q它只是命o行的化替代品?br>你不讄话它是"."?/p>
回到sourcepathQsourcepath指的是你
java完全不同Qjava没有头文Ӟ每个.java都是要放在源代码树中的?br>那么q颗树是怎么l织的呢Q?br>对了Q就是package语句?br>比如写了package com.lightning;
那么q个.java必L在源代码树根\的com\lighting\之下才行?/p>
很多躁的初学者被default打包方式宠坏了。自我ؓ中心Q以为java是一套库Q自己写
的时候最多importq来p了,代码从不打包Q直接javacQ直接javaQ多么方ѝ?br>C知自己写的这?java也不q是java大^台的其中一个小单元而已。如果不打包Q?br>我写一个PointQ你写一个PointQ甚x有甚者敢于给自己的类起名叫String{等?br>全部都在qx式的目录中,那jre该选哪一个?
一旦要使用package语句Q就要用代码树l构Q当Ӟ你要直接javacQ也行?br>不过javac出来的这个class要放在符合packagel构的目录中才能发挥正常作用Q否则就?br>废物一坨?br>而且Q如果你q个.javaq用到其它自己写的有package语句?javaQ那q个Ҏ回天乏
术了?/p>
按照sun的想象,应该是写好的.java攑֜W合packagel构的目录中Qpackage语句保证?br>正确攄Q如果目录位|和package语句中指C的不同Q则会出错?/p>
所以按照刚才我们的那种package写法Q我们必然要那几个.java文g攑օ相应的目录中
才能让javac利扑ֈ他们来make?/p>
有h说javac可不可以像java那样 java aaa.bbb.c...javaQ?br>不可?br>javac中的那个.java文g参数必须是一个文件系l的路径文g名Ş式?br>然后如果用到其它?javaQjavac会根据目前的sourcepath出发L目录l构中的那些
java文g?/p>
当然了,既然打了包,在用的时候?br>要么写全名——包?cd
或者用import
不得不提的是Qimport好比c++的usingQ它不负责做文g操作Q它只是方便你写代码?/p>
另外import
~译器仍然找不到com.lightning中的McR?br>反之亦然?br>好象你告诉~译器,我这里面要用到姓诸葛的h?br>那么姓诸的h当然~译器不会认Z包含在内?
所以,如果E序一旦写C定规模?br>׃得不使用ant来管理这些?br>或者用IDEQ否则jdkq的变成了java developer killer?/p>
但是对于初学者,在了解ؓ什么会有ant之类的之前,q是要体会一下?br>jdk的艰辛?/p>
q个和以前在unix上开发的人用gcc命o行到后来使用make之后使用ide
之类的时候的体会是类似的?/p>
最后,javac?d参数是指C编译出来的class
此程序理想的打印l果应该是:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
但实际打印结果却是:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
1.0000001
请问q是Z么?又该如何避免Q?
q个E序是一个关于在手机上显C图片的E序Q分成两D:
1、MainCanvas.java部分
内容如下Q?/p>
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class MainCanvas extends Canvas {
public Image m_Image;
MainCanvas(){
try{
m_Image=Image.createImage("/IM.png");
}
catch(IOException e){
}
}
protected void paint(Graphics g){
g.drawImage(m_Image,0,0,Graphics.TOP|Graphics.LEFT);
}
}
2、MyCartoonMidlet.java部分
内容如下Q?/p>
ukimport javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MyCartoonMidlet extends MIDlet {
public MainCanvas m_MainCanvas;
public MyCartoonMidlet() {
// TODO 自动生成构造函数存?br>}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成Ҏ存根
}
protected void pauseApp() {
// TODO 自动生成Ҏ存根
}
protected void startApp() throws MIDletStateChangeException {
m_MainCanvas=new MainCanvas();
Display.getDisplay(this).setCurrent(m_MainCanvas);
while(true){
m_MainCanvas.repaint();
}
}
}
q程是调用目录下的一个叫?IIM.PNG的文?/p>
在调试过E中Q编译器老是报Java.lang.NullPointerException 的错误,摸瓜Q发现是找不到图片的问题才导致抛L异常。可是我已经把图片放CE序目录下呀。于是一度认为是~程环境Z问题。可事实q如此。查找了半天资料才发玎ͼ原来囄应该攑֜verified\classes下,把文件放q去Q所有问题都解决了。OKQ?/p>
Eclipse3.0.1上Visual Editor
. 好多朋友都在使用EclipseQ我也在学习使用中,L喜欢试新鲜的东西,以前一直没有用过clipse的Visual Edit 插gQ装q一ơ,可就是没有成功,l过反复琢磨同时又看了别的网友的l验Q今天将我的配置q程介绍l大Ӟ希望能给大家帮助?/p>
W一? 下蝲所需软g
JDK 版本要在1.4.2以上?/p>
NLpack-eclipse-SDK-3.0.x-win32 Q这个Eclipse开发^台的汉化包,可以不?/p>
W二步:
安装JDKQ这个就不说了)Q?/p>
看看Eclipse能否正常q行Q下载的Eclipse一般是一个压~文Ӟ我们把它解压~ؓ F:\eclipse ,双击F:\eclipse\eclipse.exe应用E序Q也是 图标Q?/p>
首次q行E序的界面ؓ
W三?安装插g
q里Q我们用写链接文g的方式来安装插g
1Q?nbsp; 在F:\eclipse文g夹下面徏立一个links文g?img height=54 src="http://blog.csdn.net/images/blog_csdn_net/sstallman/70318/links.jpg" width=62 border=0>Q我们的Q链接文件就攑֜q个文g夹下面的?/p>
2Q在F盘徏立一个plugins文g?img height=53 src="http://blog.csdn.net/images/blog_csdn_net/sstallman/70318/plugins.jpg" width=62 border=0>Q专门用来存N要安装的插g。我们把下蝲的emf-sdo-runtime-2.0.1和GEF-runtime-3.0.1插g解压~到FQ\plugins目录下面Q整个目录结构可以见下图
3. 写链接文?/p>
我们用记事本建立文gQ文件以 .link为后~Q徏立四个链接文Ӟ名字分别?
名字Q?nbsp; emf-sdo-runtime-2.0.1.link
文g内容Qpath=F:\\plugins\\emf-sdo-runtime-2.0.1
名字Q?nbsp; GEF-runtime-3.0.1.link
文g内容Qpath=F:\\plugins\\GEF-runtime-3.0.1
名字Q?nbsp; VE-runtime-1.0.1.1.link
文g内容Q?