Java类路径问题 - 将无法运行

时间:2013-01-06 19:58:18

标签: java classpath

我正在学习如何从命令行运行Java,并继续遇到同样的问题。我正在运行的main()方法位于bin/edu/cuny/util/ConvertTestVectors.class

我将目录设置为bin/cuny/。当我运行> java -cp . ConvertTestVectors时,我得到:

Error: Could not find or load main class ConvertTestVectors

当我运行> java -cp . util/ConvertTestVectors时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: util/ConvertTestVectors (wrong name: edu/cuny/util/ConvertTestVectors)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)

有人能指出我正确的方向吗?谢谢!

2 个答案:

答案 0 :(得分:2)

要运行某些java类的main方法,必须在命令行中指定此类的完全限定名称。例如,如果您有来源:

package edu.cuny.util;

class ConvertTestVectors {
    ...
    public static void main(String [] args) {
        ...
    }
    ...
}

然后运行这个main方法你应该使用

java edu.cuny.util.ConvertTestVectors

如果您的包名称不同,则应相应地在命令行中更改类名。

此外,还有一个CLASSPATH变量,用于确定java查找类的位置。它应该包含java包的根目录所在的目录(edu的父目录是前一个示例的大小写)。如果它包含.,那么您只需将目录更改为该根目录并运行java命令。

完全限定类名的部分用点(.)分隔,因此不应在类名中使用斜杠(/

答案 1 :(得分:1)

cd bin/edu/cuny && java util.ConvertTestVectors

您必须使用完整的包名。