java编译成功,但运行失败,即错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException:

发布于:2023-01-14 ⋅ 阅读:(862) ⋅ 点赞:(0)

提示:如果修改了环境变量,cmd需要重新打开

编译:javac xxx.java(利用cmd编译,必须在java文件对应目录下执行编译命令)

运行:java xxx(不带后缀,运行之前会先查找是否有对应编译好的文件,没有会自动先编译生成class文件再运行) 

  1. 如果java文件能够编译成功,说明环境变量path没有问题
  2. 查看环境变量是否有classpath,以及要确保classpath的路径是准备运行的.class文件的位置,如果不符合,这就是程序出错的原因。

           classpath的作用:classpath不是操作系统的变量,而是java的变量,顾名思义,它是用于在java编译和运行时告知类的路径,当我们在cmd执行“运行”操作:java Xxx 时,java程序会将classpath作为根路径,寻找名为Xxx的.class文件,如果你要运行的文件不在classpath指定路径下(在classpath路径的包里也不行,必须在classpath路径下),就会报错。先理解原理,如果是这个原因保存也可以直接看序号(4)

           注意:这个错误是找不到运行的文件,还有另一种情况会提示做不到导入的文件错误,转到序号(3)

  3. 序号1和2都没问题,如果报错提示准备运行的文件找不到import(引入)的类,这是由于引入的类不在classpath下。例如下面的文件:

           要执行的文件为LibTest.java,创建的Vector对象的类在com.mindviewinc.simple包里。LibTest.java编译和运行时java程序会将classpath作为根路径,先寻找名为LibTest的文件,然后找导入的类文件,看classpath指定路径+com.mindviewinc.simple位置下是否有Vector,没有则报错。那如何合理的设置classpath?通常设置为大包所在的位置就行,本例中com所在的位置,如下图:这样创建的其他包也可以放在OnJava8-Examples下,结构清晰。

  4. 由于我们要经常编写多个文件运行,他们可能在不同位置,这意味着对应的.class文件也不在一起(.java文件和编译后的.class文件默认生成在同一目录下),那如何配置classpath,让cmd可以轻松知道要运行的.class文件位置在哪呢?或者说如何通过cmd编译.java文件后可以直接运行呢?将classpath=.        .代表当前目录,因为我们每次使用cmd通常情况下编译后运行,由于设置了运行后寻找文件的位置是当前目录,而当前目录正是.java所在的位置,也就是.class的位置。

上面添加后双击就是如下效果

 如果对您有帮助,还请点赞收藏呀!