目录结构:
c:
|
|
CalTime
--------|--------
| |
| |
vehicle ComputeTime.java
|
---------
| |
| |
all Palne.java /Car.java
|
|
Common.java源程序1:(ComputeTime.java)import CalTime.vehicle.all.Common;
import java.lang.*;public class ComputeTime {
public static void main(String args[]) {
...
double A=Double.parseDouble(args[1]);
double B=Double.parseDouble(args[2]);
double C=Double.parseDouble(args[3]);
double v,t;
try {
Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance();
v=d.runTimer(A,B,C);
... } catch(Exception e) {
System.out.println(class not found);
}
}
}源程序2:(Plane.java)
package CalTime.vehicle;import CalTime.vehicle.all.Common;public class Plane implements Common {
public double runTimer(double a, double b, double c) {
return (a+ b + c);
}
}源程序3:(Car.java)
package CalTime.vehicle;import CalTime.vehicle.all.Common;public class Car implements Common {
public double runTimer(double a, double b, double c) {
return ( a*b/c );
}
}接口:(Common.java)package CalTime.vehicle.all;public interface Common {
double runTimer(double a, double b, double c);
}在上面这个例子中,我用JBuilder调试编译通过了,但是在命令行模式执行的时候老说出错,C:\>java -classpath c:\CalTime\ComputeTime Plane 200 200 200
Exception in thread "main" java.lang.NoClassDefFoundError: Plane我试了试把全部源程序的包路径都删掉,把全部源程序放在一个默认包里,编译然后执行,可以执行,而且带参数的执行可以动态加载类,结果正确!这到底是怎么一回事?!我查了一些资料和java文档,这一句:Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance(); 是这样用的啊!编译也没错,就是得不到结果,我怀疑是("CalTime.vehicle."+args[0])的动态加载路径问题,可是classpath里面我已经设了c:\了,各个类也在相应的包里面,百思不解!请那位大虾指点!
c:
|
|
CalTime
--------|--------
| |
| |
vehicle ComputeTime.java
|
---------
| |
| |
all Palne.java /Car.java
|
|
Common.java源程序1:(ComputeTime.java)import CalTime.vehicle.all.Common;
import java.lang.*;public class ComputeTime {
public static void main(String args[]) {
...
double A=Double.parseDouble(args[1]);
double B=Double.parseDouble(args[2]);
double C=Double.parseDouble(args[3]);
double v,t;
try {
Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance();
v=d.runTimer(A,B,C);
... } catch(Exception e) {
System.out.println(class not found);
}
}
}源程序2:(Plane.java)
package CalTime.vehicle;import CalTime.vehicle.all.Common;public class Plane implements Common {
public double runTimer(double a, double b, double c) {
return (a+ b + c);
}
}源程序3:(Car.java)
package CalTime.vehicle;import CalTime.vehicle.all.Common;public class Car implements Common {
public double runTimer(double a, double b, double c) {
return ( a*b/c );
}
}接口:(Common.java)package CalTime.vehicle.all;public interface Common {
double runTimer(double a, double b, double c);
}在上面这个例子中,我用JBuilder调试编译通过了,但是在命令行模式执行的时候老说出错,C:\>java -classpath c:\CalTime\ComputeTime Plane 200 200 200
Exception in thread "main" java.lang.NoClassDefFoundError: Plane我试了试把全部源程序的包路径都删掉,把全部源程序放在一个默认包里,编译然后执行,可以执行,而且带参数的执行可以动态加载类,结果正确!这到底是怎么一回事?!我查了一些资料和java文档,这一句:Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance(); 是这样用的啊!编译也没错,就是得不到结果,我怀疑是("CalTime.vehicle."+args[0])的动态加载路径问题,可是classpath里面我已经设了c:\了,各个类也在相应的包里面,百思不解!请那位大虾指点!
C:\>java -classpath CalTime.ComputeTime.Plane 200 200 200