彻底解决问题【找不到或无法加载主类】

【错误描述】在cmd命令下运行程序出现问题:找不到或无法加载主类
【错误分析】
1)没有正确的设置classpath环境变量

image.png

在classpath的值加上一个.就可以,表示当前目录。

2)在正确的设置classpath环境变量之后,仍然出现这问题

在正确编译的情况下,如果出现了这种问题,一般都是因为设置了包名,并且以编译器的工作目录为根目录时,找不到相应的包

现在以一个简单的例子来分析下这个问题。
Test1.java:

package com.anchor.core;
public class Test1 {
    public static void main(String[] args){
        System.out.print("Test1.java execute finished");
    }
}

上述代码通过IDEA可以编译运行通过。

在如下cmd命令行运行时:

E:\study\java\javafile\javaStudy\com\anchor\core>javac Test1.java
E:\study\java\javafile\javaStudy\com\anchor\core>java Test1

编译通过
但运行时会出现问题:

错误: 找不到或无法加载主类 Test1
原因: java.lang.ClassNotFoundException: Test1

cmd的当前目录(cmd会将当前目录是做工作目录,查找类时都会基于这个目录进行寻找)是:E:\study\java\javafile\javaStudy\com\anchor\core>
又在该程序的开头:

package com.anchor.core;

以虚拟机的视角来看:

(注:java虚拟机会将工作目录和开头的package语句的目录进行拼接)
在IDEA中,工作目录:E:\study\java\javafile\javaStudy
要找的class文件为com.anchor.core.Test1.class
实际得到的:com.anchor.core.Test.class
所以执行通过。

而打开cmd时,执行命令

E:\study\java\javafile\javaStudy\com\anchor\core>java Test1

工作目录为:E:\study\java\javafile\javaStudy\com\anchor\core
要找的class文件为com.anchor.core.Test1.class
实际得到的:com.anchor.core.com.anchor.core.Test.class

如果要在cmd中执行,则需要切换到工作目录:

E:\study\java\javafile\javaStudy>java com.anchor.core.Test1
Test1.java execute finished

执行通过。

你可能感兴趣的:(彻底解决问题【找不到或无法加载主类】)