在Java

时间:2015-05-15 18:55:00

标签: java classpath

我正在学习java中的classpath。我创建了一个名为Geometry的包,它存储在C:\Java\中,包含一个文件Point.java,其中包含以下代码

package Geometry;

public class Point 
{
    double x;
    double y;

    public Point(double xVal, double yVal) 
    {
        x = xVal;
        y = yVal;
    }

    public Point(final Point oldPoint) 
    {
        x = oldPoint.x;
        y = oldPoint.y;
    }

    void move(double xDelta, double yDelta)
    {
        x += xDelta;
        y += yDelta;
    }

    double distance(final Point aPoint)
    {
        return Math.sqrt(  Math.pow((x - aPoint.x), 2) + Math.pow((y - aPoint.y), 2)  );
    }

    public String toString()
    {
        return x + ", " + y;
    }

}

然后我在C:\Users\username\workspace\Test中创建了另一个名为Test.java

的文件

其中包含以下内容

import Geometry.*;

public class Test 
{
    public static void main(String[] args) 
    {       
        Point l1 = new Point(1,2,3,4);
        System.out.println(l1);
    }

}

然后使用

进行编译
C:\Users\username\workspace\Test>javac -cp c:\Java Test.java

它成功编译但在运行时抛出NoClassDefFoundError异常错误。有什么问题

1 个答案:

答案 0 :(得分:1)

(JP Moresmau和RC在评论中给出的答案,将其放在此处完成)。

在Java中,您需要在编译和运行时指定类路径。所以当你用

编译时
javac -cp c:\Java Test.java

您正在使用c:\​​ Java作为EXTRA类路径参数编译当前目录中的Test类。

当您想要运行Test类时,您需要告诉Java在哪里找到它自己的类(在当前目录中)以及所需的类。如果你只是运行

java Test

Java将使用当前文件夹作为唯一的类路径,因此将找不到已在C:\ Java中编译的引用类。因此,您需要指定

java -cp "C:\Java;." Test

指出在哪里可以找到所有必需的课程。