【问题标题】:Error: could not find or load main class newClass JVM错误:无法找到或加载主类 newClass JVM
【发布时间】:2020-12-30 00:29:12
【问题描述】:

在目录中:

/home/ThinkPinkApp/flocks

我有以下两个源文件:

FlockingInformation.java FlockLists.java

在我拥有的每个源文件的顶部

package home.ThinkPinkApp.flocks

编译文件不会导致任何问题,但是,当我尝试为每个文件运行主要方法时,我收到以下错误:

Error: Could not find or load main class FlockingInformation Caused by: java.lang.NoClassDefFoundError: home/ThinkPinkApp/flocks/FlockingInformation (wrong name: FlockingInformation)

在我的主目录~/ThinkPinkApp/objects 中编译和运行不带 package 关键字的文件很好,不会导致任何问题。当我将package objects 添加到我的主目录中的相同源文件时,虽然我收到了相同的错误。

我尝试在 java 命令中使用 -CLASSPATH 选项,但仍然收到相同的错误。我已阅读有关 java 命令的官方 oracle 文档,但不确定我做错了什么。我的理解是JVM默认在当前目录中查找文件,那么为什么它不能找到/加载这些类呢?我知道 JVM 也使用类路径变量,但我不确定如何访问/更改它。即便如此,我也应该能够使用 -cp 选项手动更改它在哪些目录中显示,对吗?

我还尝试使用java home.ThinkPinkApp.FlockingInformation 运行文件,这会产生类似的错误,减去(wrong name: FlockingInformation) 部分。不过不确定这意味着什么。

任何解释或建议将不胜感激。

【问题讨论】:

    标签: java compiler-errors compilation jvm package


    【解决方案1】:

    一般来说,Java 源代码和类需要以目录层次结构与包层次结构相匹配的方式存储。如果要运行类home.Foo,则类文件必须在目录home 中。那么要么当前目录应该是包含home 的目录,要么$CLASSPATH 需要引用包含home 的目录。

    使用-d 切换到javac 将控制编写编译类的目录。给出此开关后,将自动创建目录结构以使其与包结构相匹配,因此您无需手动移动.class 文件。

    这里有这些问题的详细讨论:

    What does "Could not find or load main class" mean?

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 2016-03-16
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多