无法在简单的 java 项目中找到或加载 main class

Could not find or load main class in a simple java project

我创建了一个简单的 java 项目“DesignPatterns”。 我创建了一个文件 FacadePattern.java,路径为 ~/DesignPatterns/Structural/FacadePattern/FacadePattern.java

我的FacadePattern.javaclass,

public class FacadePattern {
    public static void main(String args[]) {
        // Some code
    }
}

但是我的编辑器 (VSCode) 在文件开头给我一个错误: The declared package "" does not match the expected package "Structural.DecoratorPattern"

所以点击快速修复后,它在第一行添加了package Structural.FacadePattern;

所以最后的代码变成了

package Structural.FacadePattern;

public class FacadePattern {
    public static void main(String args[]) {
        // Some code
    }
}

但是当我使用命令编译上面的文件时

javac FacadePattern.java && java FacadePattern

它给我以下错误:

Error: Could not find or load main class FacadePattern
Caused by: java.lang.NoClassDefFoundError: Structural/FacadePattern/FacadePattern (wrong name: FacadePattern)

在网上搜索了很多之后,我运行下面的命令:

javac -sourcefile ~/DesignPatterns FacadePattern.java && java FacadePattern

但是没有用,我得到了同样的错误。

谁能解释一下为什么我的编辑器报错但之前代码 运行 成功了?以及为什么在添加“package Structural.FacadePattern;”后它无法编译?线? javac 命令中的 -sourcefile 参数是什么?以及如何 运行 在编辑器和终端中成功无误地编写代码?

  1. 坚持命名规则。包名只能是小写。在你的情况下,它应该是 package structural.facadepattern;

  2. 运行'correct'class。因为你的 class 不在 'the base folder' 里面,也就是 'default package',你必须在 class 前面加上它的包名:java Structural.FacadePattern.FacadePattern 或者 java structural.facadepattern.FacadePattern如果您使用正确的包裹大小写。