尝试在命令提示符下运行程序(无法找到或加载主类)

时间:2018-09-16 20:05:00

标签: java

我有一个名为“ Averages.Java”的程序,可以在我的IDE中正常运行,但是当我在命令提示符下导航到该程序的正确位置并尝试运行它时,出现错误消息

  

“错误:无法找到或加载主类平均值,原因如下:   java.lang.ClassNotFoundException:平均值

这是程序的代码

import java.util.Scanner;

public class Averages1 {

  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.print("Enter first user name: ");
    String firstName = in.next();

    System.out.print("Input first number: ");
    int num1 = in.nextInt();

    System.out.print("Enter second user name: ");
    String secondName = in.next();

    System.out.print("Input second number: ");
    int num2 = in.nextInt();

    System.out.print("Enter third user name: ");
    String thirdName = in.next();

    System.out.print("Input third number: ");
    int num3 = in.nextInt();

    System.out.println(firstName +": "+ num1);
    System.out.println(secondName +": "+num2);
    System.out.println(thirdName +": "+num3);
    System.out.println("Total of 3 numbers is : " + (num1 + num2 + num3));
    System.out.println("Average of 3 numbers is: " + (num1 + num2 + num3) / 3);
  }
}

3 个答案:

答案 0 :(得分:2)

您应该将文件另存为Averages1.java,因为这就是您的类名。

然后,导航到该文件所在的位置,并使用以下命令:

javac Averages1.java

现在,将生成一个Averages1.class文件。要运行它,您需要使用以下命令:

java Averages1

答案 1 :(得分:0)

简单地说,您的类名称必须与它们所包含的.java文件名相匹配。

由于您的课程定义为Averages1,因此必须将其保存在文件名Averages1.java中。

如果名称不匹配,Java编译器将始终抛出此错误。

大多数现代IDE 应该在创建类时已经警告过您(例如,IntelliJ IDEA确实如此)。

答案 2 :(得分:0)

对于遇到同样问题的不幸者:不要阅读此答案,请转到here

嘿,欢迎来到stackoverflow!

我将这个问题标记为this question的重复,这个问题有一个广泛的答案,应该可以为您提供很多帮助(尤其是关于软件包的 wink )。

在一条评论中,您共享了java命令输出,这引发了以下异常:

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

查看引起错误的异常,您可以看到java命令正在 averages 包中寻找Averages1类。这意味着您没有共享完整的源代码。您可能已经在Averages1.java源文件的顶部定义了包,看起来像package averages;。使用软件包时,在使用java命令时,需要使用完全合格的类名,包括软件包名。

java averages.Averages1

不幸的是,java命令期望Averages1类文件(您之前使用javac命令生成的文件)位于averages文件夹中。要从当前工作目录运行Averages1,您需要将Averages1.class文件放在averages子目录中:

/ <-- current working directory
/averages/Averages1.class

所以。您会发现,如果您有多个具有多个类的文件(如果您真的想在没有脚本的情况下手动执行此操作,那么您会疯了!),以及第三方库(精美的数学资料,日志记录等),那么这整堆内容将很混乱。 )的情况(有时100%是这种情况),您不想手动执行此操作。幸运的是,有些人使您的生活更轻松。诸如gradle或Maven之类的构建工具可以处理所有这些问题,只剩下一个文件,您可以在其中定义所需的文件(在您的情况下可能是jar文件,或多或少是可运行的zip文件)以及要包含的库。像Eclipse和IDEA这样的IDE也是如此。如果您真的想手动执行此操作,请确保已阅读所使用命令的手册。