我正在学习如何从命令行运行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)
有人能指出我正确的方向吗?谢谢!
答案 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
您必须使用完整的包名。