【错误描述】在cmd命令下运行程序出现问题:找不到或无法加载主类
【错误分析】
1)没有正确的设置classpath环境变量
![](https://img.haomeiwen.com/i11910087/db97ba6f490b604e.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
执行通过。
网友评论