从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解

您所在的位置:网站首页 在cmd中运行java时出错 从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解

从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解

2023-08-08 16:23| 来源: 网络整理| 查看: 265

从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解 Java源文件所在目录

文件一:E:\com\test\Test.java

package com.test; import com.packageaccess.*; public class Test { public static void main(String[] args) { PackageAccess PA = new PackageAccess(); } }

文件二:E:\com\packageaccess

package com.packageaccess; public class PackageAccess { public PackageAccess(){ System.out.println("This is com.packageaccess.PackageAccess Class!"); } }

在这里插入图片描述

问题一:程序包XXX不存在

在test目录下通过cmd命令窗口编译Test.java文件复现该问题,如图: 在这里插入图片描述 解决办法:在com目录的父目录中通过cmd窗口执行javac com\test\Test.java,如图: 在这里插入图片描述

问题二:找不到或无法加载主类XXX

在test目录下通过cmd命令窗口编译Test.java文件复现该问题,如图: 在这里插入图片描述 解决办法:在com目录的父目录中通过cmd窗口执行java com.test.Test,如图: 在这里插入图片描述

问题分析

Java中完整的类名应该是包名+类名,本文中的两个Java源程序的包的公共路径都为com,当我们在test目录下编译Test.java文件时,虚拟机会认为我们Test.java文件的位置为:test\com\test\Test.java,然后以此去查找com.packageaccess包,当然查找失败!

同理,当我们在test目录下通过java命令运行Test时,虚拟机默认在test\com\test下去查找Test.class文件,当然查找不到!

此问题的原因可归结到环境变量CPASSPATH的设置上,在CLASSPATH中,“.”表示当前目录。 在这里插入图片描述 Java解释器的运行过程:首先,找出环境变量CLASSPATH(可以通过操作系统来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径(例如,package com.test就变成为com\test或com/test或其他,这将取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的根目录路径相连接以获得一个完整的目录路径,解释器就在这些目录中查找与你所需要的类名称相同的.class文件(此外,解释器还会去查找某些涉及Java解释器所在位置的标准目录)。所以在这里Java寻找的就是CLASSPATH+package名。

参考链接: https://blog.csdn.net/ncc1995/article/details/84932759 https://blog.csdn.net/weixin_45655555/article/details/106469076



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3