新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
当前回答
这是另一个花费了我一点时间的问题:命令行类路径参数的行为与您预期的不同。我在MacOS上直接调用CLI,并且在调用中包含两个jar。
例如,这两个都让工具混淆了主类的名称:
这是因为星号导致它错误地解析参数:
java-cp路径/to/jars/*com.mypackage.Main
这是因为我不知道为什么:
java-cp“*.jar”com.mypackage.Main
这是有效的:
java-cp“path/to/jars/*”com.mypackage.Main
显式列出两个jar也有效:
java-cp路径/to/jars/jar1.jar:路径/to/jar/jar2.jar com.mypackage.Main
其他回答
在这种情况下,我犯了这样一个错误:
java -cp lib.jar com.mypackage.Main
它与以下各项一起工作:;对于Windows和:对于Unix:
java -cp lib.jar; com.mypackage.Main
在IntellijIDE中,选择run/debug>>编辑配置,然后为构建和运行菜单选择适当的JDK。
原因#2-应用程序的类路径指定不正确。阅读之前链接的三个文档。(是的……阅读它们!重要的是,Java程序员至少了解Java类路径机制的基本原理。)。
JDK工具和实用程序常规常规信息(文件结构、类路径、如何找到类、更改)增强功能(JDK 7中的增强功能)标准JDK工具与实用程序
https://docs.oracle.com/javase/7/docs/technotes/tools/index.html
https://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html
Java Launcher如何查找类了解类路径和包名
https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javac.html
Java中的ClassLoader Java ClassLoader是Java运行时环境的一部分,它将Java类动态加载到Java虚拟机中。由于类加载器,Java运行时系统不需要了解文件和文件系统。
Java类不会一次加载到内存中,而是在应用程序需要时加载。此时,JRE调用Java ClassLoader,这些ClassLoader将类动态加载到内存中。
https://en.wikipedia.org/wiki/Java_Classloader
https://www.geeksforgeeks.org/classloader-in-java/
https://en.wikipedia.org/wiki/Java_virtual_machine
使用此命令:
java -cp . [PACKAGE.]CLASSNAME
示例:如果类名是从Hello.java创建的Hello.class,则使用以下命令:
java -cp . Hello
如果文件Hello.java位于com.demo包中,请使用以下命令
java -cp . com.demo.Hello
在JDK8中,类文件多次出现在同一文件夹中,但java命令需要类路径,因此我们添加了-cp。将当前文件夹作为类路径的参考。
默认情况下,Java使用。,当前工作目录,作为默认CLASSPATH。这意味着,当您在提示符处键入命令(例如javaMyClass)时,该命令将被解释为您键入了java-cp。我的班级。你看到-cp和MyClass之间的点了吗?(cp是较长类路径选项的缩写)
这在大多数情况下都是足够的,在您尝试向CLASSPATH添加目录之前,一切似乎都很正常。在大多数情况下,当程序员需要这样做时,他们只需运行一个命令,比如set CLASSPATH=path \to\some\dir。此命令创建一个名为CLASSPATH的新环境变量,该变量的值为path\to\some\dir,或者如果以前已设置CLASSPATH,则将其值替换为path \to\sme\dir。
完成后,您现在有了一个CLASSPATH环境变量,Java不再使用默认的类路径(.),而是使用您设置的类路径。所以第二天你打开编辑器,写一些java程序,cd到你保存它的目录,编译它,并尝试用命令javaMyClass运行它,你会得到一个很好的输出:找不到或加载主类。。。(如果您的命令以前工作得很好,现在得到了这个输出,那么您可能就是这样)。
发生的情况是,当您运行命令javaMyClass时,java会在CLASSPATH中设置的一个或多个目录中搜索名为MyClass的类文件,而不是当前工作目录,因此在那里找不到您的类文件并因此发出抱怨。
你需要做的是添加。这可以通过命令集CLASSPATH=%CLASSPATH%;来完成;。(注意分号后的点)。在纯英语中,此命令表示“选择CLASSPATH(%CLASSPATH%)的初始值,将.添加到(;.),并将结果分配回CLASSPATH”。
瞧,您再次能够像往常一样使用命令javaMyClass。