如何解决命令行编译运行Java文件时报错Could not find or load main class ...

前言

以前一直用Eclipse来运行Java程序,从未在命令行中编译运行过Java文件。直到最近某次运行别人写的bat文件时,出现“Could not find or load main class …“错误才开始了解如何通过命令行来编译运行Java文件。本文主要尝试说明导致这个错误的原因,以及如何解决。

注意:本文主要以Window下的CMD为讨论对象,linux环境不一定有效。

命令行中Java命令语法

首先,我们需要了解一个正确Java命令的格式是什么,如下所示:

java [ <option> ... ] <class-name> [<argument> ...]

其中option是以”-“开头的命令选项,例如-Xmx100m来指定运行程序时的最大堆内存为100m;class-name是需要运行Java程序的绝对路径;argument是指传入Java程序的参数。

以下面这条java命令为例:

java com.joey.test.date.DateTest

:查资料说有的JDK版本,java类名不是用“.”来分割,有可能用“/”来分割,那么此时命令如下:

java com/joey/test/date/DateTest

在命令行中输入上面这条命令后(前提是你已经用javac对DateTest.java文件进行了编译),JVM会按以下步骤进行:
1. 需找com.joey.test.date.DateTest这个类编译的Java版本;
2. 将这个类load进来;
3. 检查这个类里面是否有main函数,以及是否有合适的修饰符;
4. 调用main函数或指定的方法;

导致报错的原因:

所以当我们得到这个Could not find or load main class …报错时,说明这条命令不能找到指定的类,在上面的第一步便失败了。有两个原因为导致这条命令找不到指定的Java类:

输入类名格式不正确

1.只简单输入了类的名字

java DateTest

当一个类在包com.joey.test.date下时,我们应该输入完整的路径

java com.joey.test.date.DateTest

2.只输入了类文件的名字

java DateTest.class

此时应该输入类文件的相对路径

java com/joey/test/date/DateTest.class

3.类名没有区分大小写

java com.joey.test.date.datetest

4.类名拼写错误

java com.joey.test.date.DataTest

classpath不正确

1.首先要确定你系统的环境变量CLASSPATH是否配置正确,我的配置如下:

.;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

2.检查命令行里的目录名称和JAR包名称是否正确
3.确定在error消息里面类的路径是有效的

在经过上述排查之后,我出现错误的原因是输入类的名称没有打全,并且不需要.java后缀。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Version 1.7 ----------- - ADD: Delphi/CBuilder 10.2 Tokyo now supported. - ADD: Delphi/CBuilder 10.1 Berlin now supported. - ADD: Delphi/CBuilder 10 Seattle now supported. - ADD: Delphi/CBuilder XE8 now supported. - ADD: Delphi/CBuilder XE7 now supported. - ADD: Delphi/CBuilder XE6 now supported. - ADD: Delphi/CBuilder XE5 now supported. - ADD: Delphi/CBuilder XE4 now supported. - ADD: Delphi/CBuilder XE3 now supported. - ADD: Delphi/CBuilder XE2 now supported. - ADD: Delphi/CBuilder XE now supported. - ADD: Delphi/CBuilder 2010 now supported. - ADD: Delphi/CBuilder 2009 now supported. - ADD: New demo project FlexCADImport. - FIX: The height of the TFlexRegularPolygon object incorrectly changes with its rotation. - FIX: Added division by zero protect in method TFlexControl.MovePathSegment. - FIX: The background beyond docuemnt wasn't filled when TFlexPanel.DocClipping=True. - FIX: In "Windows ClearType" font rendering mode (OS Windows mode) the "garbage" pixels can appear from the right and from the bottom sides of the painted rectangle of the TFlexText object. - FIX: The result rectangle incorrectly calculated in the TFlexText.GetRefreshRect method. - FIX: Added FPaintCache.rcPaint cleanup in the TFlexPanel.WMPaint method. Now it is possible to define is the drawing take place via WMPaint or via the PaintTo direct call (if rcPaint contain non-empty rectangle then WMPaint in progress). - FIX: The TFlexPanel.FPaintCache field moved in the protected class section. Added rcPaint field in FPaintCache that represents drawing rectangle. - ADD: In the text prcise mode (TFlexText.Precise=True) takes into account the rotation angle (TFlexText.Angle). - FIX: Removed FG_NEWTEXTROTATE directive (the TFlexText Precise mode should be used instead). - FIX: The TFlexRegularPolygon object clones incorrectly drawed in case when TFlexRegularPolygon have alternative brush (gradient, texture). - ADD: Add TFlexPanel.InvalidateControl virtual method which calls from TFle

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值