0

我正在学习如何从命令行运行 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)

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

4

2 回答 2

2

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

package edu.cuny.util;

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

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

java edu.cuny.util.ConvertTestVectors

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

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

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

于 2013-01-06T20:19:08.053 回答
1

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

您必须使用完整的包名。

于 2013-01-06T20:00:25.763 回答