在 运行 引用同一 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
编辑:这里有一些细节,
打开你的File1.java,
确保你的驱动程序 class 是 File1 。
复制测试class的内容并粘贴到File1.java驱动程序声明之后。
例如
public class File1 {
//codes here
}
class Test {
//codes here
}
- 保存
刚才我也注意到你的包名是以大写字母开头的。规范是包名不应该包含大写字母。所以你可以重命名包名只包含小写字母。
还要确保这个文件 (File1.java ) 包含在它自己的 folder/directory 中。
然后编译。
我是 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
编辑:这里有一些细节,
打开你的File1.java,
确保你的驱动程序 class 是 File1 。
复制测试class的内容并粘贴到File1.java驱动程序声明之后。
例如
public class File1 {
//codes here
}
class Test {
//codes here
}
- 保存
刚才我也注意到你的包名是以大写字母开头的。规范是包名不应该包含大写字母。所以你可以重命名包名只包含小写字母。
还要确保这个文件 (File1.java ) 包含在它自己的 folder/directory 中。 然后编译。