新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
当前回答
原因#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
其他回答
原因#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
在我的例子中,出现错误是因为我提供了源文件名而不是类名。
我们需要向解释器提供包含main方法的类名。
有时,在您可能尝试过的一些在线编译器中,如果不编写公共类[Classname],而只编写类[Classname],则会出现此错误。
这就是我解决问题的方法。
我注意到,如果在编译中包含jar文件,那么将当前目录(./)添加到类路径中会有帮助。
javac -cp "abc.jar;efg.jar" MyClass.java
java -cp "abc.jar;efg.jar" MyClass
vs.
javac -cp "**./**;abc.jar;efg.jar" MyClass.java<br>
java -cp "**./**;abc.jar;efg.jar" MyClass
这件事也发生在我身上。在我的例子中,只有在源代码中存在HttpServlet类时才会发生这种情况(IntelliJ IDEA没有给出编译时错误;servlet包导入得很好,但是在运行时出现了这个主类错误)。
我设法解决了。我进入菜单“文件”→ 项目结构…:
然后到模块:
servlet模块附近有一个提供的作用域。我将其更改为编译:
而且成功了!