在 运行 引用同一 package/direcory 中的另一个 class 文件的 class 文件(来自 cmd)时出现 noClassDefFound 错误

Getting a noClassDefFound error whilst running a class file (from cmd) that references another class file in the same package/direcory

我是 Java 编程新手,请听我说完! 我用 JEdit 和 Notepad++ 编写我所有的程序,然后用 windows 命令行编译和 运行 它们。 (cd -directory- javac file.java java 文件等...) 但是,我从未能够 运行 具有多个 class 文件的程序文件。 这是我一直在尝试测试的程序:

package JavaTests;

public class file1{
    public static void main(String[] args){
        Test test = new Test("Hello");
        Test test2 = new Test("Good");
        test.say(true);
        test.newln();
        test2.say(false);
        System.out.println(test2.getMessage());
        test2.setMessage("GoodBye");
        test2.say(true);
    }
}

和 'Test' class:

package JavaTests;

public class Test{
    private String message;
    public Test(){
        message = "I have nothing to say.";
    }
    public Test(String thingToSay){
        message = thingToSay;
    }
    void say(boolean newLn){
        if(newLn){
            System.out.println(message);
        }else{
            System.out.print(message);
        }
    }
    void setMessage(String newMessage){
        message = newMessage;
    }
    String getMessage(){
        return message;
    }
    void newln(){
        System.out.println();
    }
}

Java 个文件在文件夹 ...\Desktop\JavaTests\ 中 所以我输入

cd ...\Desktop\JavaTests
javac file1.java Test.java
java file1

java 文件编译正确并且 class 文件出现在 JavaTests 文件夹中,但是当我尝试 运行 file1:

C:\...\Desktop\JavaTests>java file1
Error: Could not find or load main class file1
Caused by: java.lang.NoClassDefFoundError: JavaTests/file1 (wrong name: file1)

如果我尝试 java JavaTests.file1:

C:\...\Desktop\JavaTests>java JavaTests.file1
Error: Could not find or load main class JavaTests.file1
Caused by: java.lang.ClassNotFoundException: JavaTests.file1

文件确实存在,我仔细检查了class路径。 大多数其他问题都是 'exception in the thread Main' 的实例。我不知道出了什么问题。谁能帮忙?谢谢!

在 java 中,规范是用首字母大写来命名您的 class。因此,将其命名为 File1 而不是 file1 例如 public class File1 {

并用相同的名称保存它,即 File1.java 。 由于您将所有 classes 保存在同一个包中,因此将同一个包中的所有 classes 写入同一个文件中,并将其保存在驱动程序 class 的名称中(class 的主要方法是 File1.java)。然后编译它即

javac File1.java

编译后,您会注意到生成的 classes,即 File1.class 和 Test.class。 然后你可以通过执行驱动程序class来运行你的程序,即 java 文件 1

编辑:这里有一些细节,

  1. 打开你的File1.java,

  2. 确保你的驱动程序 class 是 File1 。

  3. 复制测试class的内容并粘贴到File1.java驱动程序声明之后。

例如

public class File1 { //codes here }

class Test { //codes here }

  1. 保存

刚才我也注意到你的包名是以大写字母开头的。规范是包名不应该包含大写字母。所以你可以重命名包名只包含小写字母。

还要确保这个文件 (File1.java ) 包含在它自己的 folder/directory 中。 然后编译。