Test.java
package test;
import shape.twod.*;
import shape.threed.*;
import shape.*;
public class Test {
/**
* Creates a new instance of <code>Test</code>.
*/
int o;
public Test() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ObjActions obj[] = new ObjActions[4];
obj[0] = new Line(1,2,3,4);
obj[1] = new Circle(1,2,3);
obj[2] = new Line3D(1,2,3,4,5,6);
obj[3] = new Sphere(1,2,3,4);
for(ObjActions x: obj)
x.draw();
ObjActions.Actions2D o =(Circle)obj[1];
//Actions2D o =(Circle)obj[1];
System.out.println("Area of circle "+o.area());
ObjActions.Actions3D op = (Sphere)obj[3];
System.out.println("Volume of sphere "+op.volume());
}
}
其位置为D:\Program\Javalearningprograms
,所用包的位置为D:\Program\Javalearningprograms\PackageCheck
首先我用
编译它 javac -classpath .\PackageCheck -d .\ Test.java
它成功编译并在.\test
中创建了Test.class,然后我使用了这个
java -classpath .\PackageCheck test.Test
得到Error: Could not find or load main class test.Test
所以我尝试了完整的路径:
java -classpath D:\Program\Javalearningprograms\PackageCheck\ test.Test
和
java -classpath D:\Program\Javalearningprograms\PackageCheck test.Test
仍然有Error: Could not find or load main class test.Test
然后检查天气.class文件有任何错误我将文件夹.\test
移到了D:\Program\Javalearningprograms\PackageCheck
并尝试了
java test.Test
的 D:\Program\Javalearningprograms\PackageCheck
,程序成功运行
然后我将CLASSPATH
环境变量设置为D:\Program\Javalearningprograms\PackageCheck
并清理.class文件然后尝试
javac -classpath .\PackageCheck -d .\ Test.java
它在.\test
文件夹中创建了Test.class,而我使用了
java test.Test
并且程序成功运行,我尝试了
java -classpath .\PackageCheck test.Test
java -classpath .\PackageCheck\ test.Test
java -classpath D:\Program\Javalearningprograms\PackageCheck test.Test
java -classpath D:\Program\Javalearningprograms\PackageCheck\ test.Test
得到Error: Could not find or load main class test.Test
我不知道为什么-classpath
没有使用java
命令,我做错了什么?
Directory: D:\Program\Javalearningprograms\PackageCheck
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 09-Dec-15 1:35 PM baseobj
d----- 09-Dec-15 1:35 PM shape
-a---- 09-Dec-15 1:33 PM 559 Circle.java
-a---- 09-Dec-15 1:33 PM 566 Line.java
-a---- 09-Dec-15 1:33 PM 627 Line3D.java
-a---- 09-Dec-15 1:32 PM 384 ObjActions.java
-a---- 08-Dec-15 9:58 PM 340 Point.java
-a---- 08-Dec-15 9:58 PM 302 Point3D.java
-a---- 08-Dec-15 10:05 PM 343 PointTest.java
-a---- 09-Dec-15 1:33 PM 547 Sphere.java
答案 0 :(得分:2)
因为Test.class
不在类路径的目录中。
javac -classpath .\PackageCheck -d .\ Test.java
创建文件test\Test.class
。
但是使用您定义的类路径-classpath .\PackageCheck
,在目录test\
中找不到它。
将您的命令更改为
java -classpath .\PackageCheck;. test.Test
这将找到PackageCheck\
以下的课程和当前目录。
编辑根据修正后的问题,PackageCheck\
似乎只包含源文件。因此,所有生成的类文件将作为
shape\twod\*.class
shape\threed\*.class
shape\*.class
test\*.class
使用java -cp . test.Test
运行代码或将编译后的类存储到专用目录(必须在之前创建)javac -cp .\PackageCheck -d bin Test.java
。然后,您可以使用java -cp bin test.Test
运行代码。 (请记住删除已创建的类文件,以确保它们不会从错误的目录中获取。)
答案 1 :(得分:1)
请参阅http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html:
默认的类路径是当前目录。 [...]使用-classpath命令行选项会覆盖默认值,因此如果要在搜索路径中包含当前目录,则必须包含“。”
这应该解释您所观察到的内容 - 默认情况下,您的课程位于test/Test.class
但是只要添加-classpath
选项,您就需要包含当前目录,例如
java -classpath .\PackageCheck;. test.Test
我移动test/Test.class
目录下的PackageCheck
文件,java
再次能够找到它,即使当前目录不是类路径的一部分。请记住,-classpath
选项定义了查找完全限定的java类的根路径 - 使用-classpath
时,不再自动包含当前目录的详细信息。
答案 2 :(得分:0)
尝试以下
javac -d PackageCheck Test.java
和编译后
java -cp PackageCheck test.Test