Java对于Cult3D演示的深层次开发有举足轻重的地位,这里说一下我快速达建的Cult3D for Java开发环境的过程
1。下载Java SDK开发包,这个在Sun公司的站点免费下载,安装
2。下载Freejava开发软件,它是我用的最多的Java开发工具,实话实说,真的好用,安装
3。设置Cult3D Java 的ClassPath
编译Cult3D Java程序,须指定一个路径,指向Cult3DDevelop.jar文件,不然编译的时候会出错哦,如下设置:
右键单击“我的电脑”-“属性”-“高级”-“环境变量”-“系统变量”在变量名中输入:CLASSPATH,变量值中输入
c:Program FilesCycoreCult3D Designer 5.3Cult3DDevelop.jar然后确定;配置完了,要重新启动计算机后,环境变量才能有效的。
4.设置Freejava的JDK路径
菜单File--Preferences,弹出窗口中的JDK Location为你的JDK安装路径,默认即可
5。哈哈,现在你可以编译你的Java for Cult3D文件了
从表面上看,Java的classpath(类路径)很简单,但一直以来它都是一个产生问题和混乱的根源。本文介绍classpath的基本知识、可能产生的问题,并提供了一个简单的classpath治理工具。
正文:
和Java类路径(classpath)打交道的过程中,开发者偶然会碰到麻烦。这是因为,类装载器实际装入的是哪一个类有时并不显而易见,当应用程序的classpath包含大量的类和目录时,情况尤其严重。本文将提供一个工具,它能够显示出被装入类文件的绝对路径名。
一、Classpath基础
Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定。CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类。另外,你也可以使用JVM命令行参数-classpath分别为应用程序指定类路径,在-classpath中指定的类路径覆盖CLASSPATH环境变量中指定的值。
类路径中的内容可以是:文件的目录(包含不在包里面的类),包的根目录(包含已打包的类),包含类的档案文件(比如.zip文件或者.jar文件)。在Unix家族的系统上,类路径的各个项目由冒号分隔,在MS windows系统上,它们由分号分隔。
类装载器以委托层次的形式组织,每一个类装载器有一个父类装载器。当一个类装载器被要求装载某个类时,它在尝试自己寻找类之前会把请求先委托给它的父类装载器。系统类装载器,即由安装在系统上的JDK或JRE提供的默认类装载器,通过CLASSPATH环境变量或者-classpath这个JVM命令行参数装入第三方提供的类或者用户定义的类。系统类装载器委托扩展类装载器装入使用Java Extension机制的类。扩展类装载器委托自举类装载器(bootstrap class loader)装入核心JDK类。
你可以自己开发非凡的类装载器,定制JVM如何动态地装入类。例如,大多数Servlet引擎使用定制的类装载器,动态地装入那些在classpath指定的目录内发生变化的类。
必须非凡注重的是(也是令人吃惊的是),类装载器装入类的次序就是类在classpath中出现的次序。类装载器从classpath的第一项开始,依次检查每一个设定的目录和压缩文件,尝试找出待装入的类文件。当类装载器第一次找到具有指定名字的类时,它就把该类装入,classpath中所有余下的项目都被忽略。
看起来很简单,对吧?
二、可能出现的问题
不管他们是否愿意承认,初学者和富有经验的Java开发者都一样,他们都曾经在某些时候(通常是在那些最糟糕的情形下)被冗长、复杂的classpath欺骗。应用程序所依靠的第三方类和用户定义类的数量逐渐增长,classpath也逐渐成了一个堆积所有可能的目录和档案文件名的地方。此时,类装载器首先装载的究竟是哪一个类也就不再显而易见。假如classpath中包含重复的类入口,这个问题尤其突出。前面已经提到,类装载器总是装载第一个它在classpath中找到的具有合适名字的类,从实际效果看,它“隐藏”了其他具有合适名字但在classpath中优先级较低的类。
假如不小心,你很轻易掉进这个classpath的陷阱。当你结束了一天漫长的工作,最后为了让应用程序使用最好、最新的类,你把一个目录加入到了classpath,但与此同时,你却忘记了:在classpath的另一个具有更高优先级的目录下,存放着该类的另一个版本!
三、一个简单的classpath工具
优先级问题是扁平路径声明方法与生俱来固有的问题,但它不是只有Java的classpath才有的问题。要解决这个问题,你只需站到富有传奇色彩的软件巨构的肩膀上:Unix操作系统有一个which命令,在命令参数中指定一个名字,which就会显示出当这个名字作为命令执行时执行文件的路径名。实际上,which命令是分析PATH变量,然后找出命令第一次出现的位置。对于Java的类路径治理来说,这应该也是一个好工具。在它的启发之下,我着手设计了一个Java工具JWhich。这个工具要求指定一个Java类的名字,然后根据classpath的指引,找出类装载器即将装载的类所在位置的绝对路径。
下面是一个JWhich的使用实例。它显示出当Java类装载器装载com.clarkware.ejb.ShoppingCartBean类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个目录下:
> java JWhich com.clarkware.ejb.ShoppingCartBean
Class 'com.clarkware.ejb.ShoppingCartBean' found in
'/home/mclark/classes/com/clarkware/ejb/ShoppingCartBean.class'
下面是第二个JWhich的使用实例。它显示出当Java类装载器装载javax.servlet.http.HttpServlet类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个档案文件中:
> java JWhich javax.servlet.http.HttpServlet
Class 'javax.servlet.http.HttpServlet' found in
'file:/home/mclark/lib/servlet.jar!/javax/servlet/http/HttpServlet.class'
四、JWhich的工作过程
要精确地测定classpath中哪一个类先被装载,你必须深入到类装载器的思考方法。事实上,具体实现的时候并没有听起来这么复杂――你只需直接询问类装载器就可以了!
1: public class JWhich {
2:
3: /**
4: * 根据当前的classpath设置,
5: * 显示出包含指定类的类文件所在
6: * 位置的绝对路径
7: *
8: * @param className <类的名字>
9: */
10: public static void which(String className) {
11:
12: if (!className.startsWith("/")) {
13: className = "/" + className;
14: }
15: className = className.replace('.', '/');
16: className = className + ".class";
17:
18: .URL classUrl =
19: new JWhich().getClass().getResource(className);
20:
21: if (classUrl != null) {
22: System.out.println("
Class '" + className +
23: "' found in
'" + classUrl.getFile() + "'");
24: } else {
25: System.out.println("
Class '" + className +
26: "' not found in
'" +
27: System.getProperty("java.class.path") + "'");
28: }
29: }
30:
31: public static void main(String args[]) {
32: if (args.length > 0) {
33: JWhich.which(args[0]);
34: } else {
35: System.err.println("Usage: java JWhich ");
36: }
37: }
38: }
首先,你必须稍微调整一下类的名字以便类装载器能够接受(12-16行)。在类的名字前面加上一个“/”表示要求类装载器对classpath中的类名字进行逐字精确匹配,而不是尝试隐含地加上调用类的包名字前缀。把所有“.”转换为“/”的目的是,按照类装载器的要求,把类名字格式化成一个合法的URL资源名。 接下来,程序向类装载器查询资源,这个资源的名字必须和经过适当格式化的类名字匹配(18-19行)。每一个Class对象维护着一个对装载它的ClassLoader对象的引用,所以这里是向装载JWhich类的类装载器查询。Class.getResource()方法实际上委托装入该类的类装载器,返回一个用于读取类文件资源的URL;或者,当指定的类名字不能在当前的classpath中找到时,Class.getResource()方法返回null。 最后,假如当前的classpath中能够找到指定的类,则程序显示包含该类的类文件所在位置的绝对路径名(21-24行)。作为一种调试辅助手段,假如当前classpath中不能找到指定的类,则程序获取java.class.path系统属性并显示当前的classpath(24-28行)。 很轻易想象,在使用Servlet引擎classpath的Java Servlet中,或者在使用EJB服务器classpath的EJB组件中,上面这段简单的代码是如何运作。例如,假如JWhich类是由Servlet引擎的定制类装载器装入,那么程序将用Servlet引擎的类装载器去寻找指定的类。假如Servlet引擎的类装载器不能找到类文件,它将委托它的父类装载器。一般地,当JWhich被某个类装载器装入时,它能够找出当前类装载器以及所有其父类装载器所装入的所有类。
【结束语】假如需要是所有发明之母,那么帮助我们治理Java类路径的工具可以说迟到了很长时间。Java新闻组和邮件列表中充塞着许多有关classpath的问题,现在JWhich为我们提供了一个简单却强大的工具,帮助我们在任何环境中彻底玩转Java类路径。
一、前言
JDK(Java Development Kit )是一切java应用程序的基础,可以说,所有的java应用程序是构建在这个之上的。它是一组API,也可以说是一些java Class。目前已经正式发布的最新版本是JDK1.3。考虑到我对linux不熟悉,而且大多数都是在MS系统下,所以,在这里我用的是win2000。
二、下载,安装
下载地址为JAVA官方站点:java.sun.com,国内也到处都是。
Windows下,直接运行.exe文件,安装到一个目录,我这里用F:jdk13作为例子。
三、配置
桌面上选择“我的电脑”(右键)
高级
环境变量
在“系统变量”--->“新建”
在变量名中输入:CLASSPATH,变量值中输入:
F:JDK13LIBdt.JAR;F:JDK13LIBTOOLS.JAR;F:JDK13BIN;然后确定;
好了,配置完了,要重新启动计算机后,环境变量才能有效的。
四、测试
(1)用文本编辑器写一个简单的java程序:
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
这个例子就是闻名的“Hello World”,它的功能就是显示“Hello World”。
注重:该文件名称必须为“HelloWorld.java”,大小写也区分。细心的朋友会注重到就是和public class后的名字一样的。
(2)编译:在dos命令提示符下执行:(注重大小写)
javac HelloWorld.java
假如正常的话,将生成HelloWorld.class文件。
(3)运行:在dos命令提示符下执行:(注重大小写)
java HelloWorld
这里有一个java初学者很有可能碰到的问题(不怕笑话,我也是)就是输入:
java HelloWorld.class
多了后面的.class,一定要注重,否则会出现下面的错误: Exception in thread "main" java.lang.NoClassDefFoundError:HelloWorld/class
(本人猜想,是不是java翻译“.”的时候换成了“/”,或者是其他的本人不知道的原因)
好了,运行java HelloWorld应该会出现伟大的“Hello World”了。
到这一步,你已经成功配置好了JDK,可以开始漫长而痛苦(对于象我一样的,以前不懂java的朋友来说,可以用“痛苦”来形容,不理解的概念,不熟悉的java api...,不过,不要急,我将和大家一起慢慢入门,慢慢提高... ...)的Java过程了。东方一蛇
提醒:关于Classpath
假如你想编译Cult3D Java,那么文件Cult3DDevelop.jar必须在你的ClassPath路径上;默认安装的时候,Cult3DDevelop.jar文件在
C:Program FilesCycoreCult3D Designer下,编译的示例如下:
javac -classpath ".;%CLASSPATH%;C:Program FilesCycoreCult3D DesignerCult3DDevelop.jar;" 你的.java代码
1 win98/SE 下面没有环境变量设置,可以修改 startup.bat 和 autoexec.bat 来实现
autoexec.bat 里面添加
PATH=%PATH%;c:jdk1.3bin;c:jdk1.3;
set CLASSPATH=c:tomcatlibant.jar
set CLASSPATH=%CLASSPATH%;c:tomcatlibjasper.jar
set CLASSPATH=%CLASSPATH%;c:tomcatlibparser.jar
set CLASSPATH=%CLASSPATH%;c:tomcatlibservlet.jar
set CLASSPATH=%CLASSPATH%;c:tomcatlibwebserver.jar
set CLASSPATH=%CLASSPATH%;c:tomcatlibjaxp.jar
set CLASSPATH=%CLASSPATH%;c:jdk1.3libdt.jar
set CLASSPATH=%CLASSPATH%;c:jdk1.3libtools.jar
在 startup.bat 里面添加
set TOMCAT_HOME=c:tomcat
set JAVA_HOME=c:jdk1.3
2 有时运行 startup.bat 出现
Out of environment space
Using CLASSPATH:
这是因为 98 的默认环境变量长度不够,做如下修改!