Windows命令行无法执行带包声明的Java程序问题求助
Java程序运行找不到主类问题排查
问题详情
编写了带sample包声明的Java代码,在G:\javaPract目录执行编译命令javac PrivateMain.java成功生成PrivateMain.class文件,但执行时无论是运行java PrivateMain还是java sample.PrivateMain,均提示找不到主类错误。已通过set CLASSPATH=%CLASSPATH%;.配置类路径,问题仍未解决。
代码内容
package sample; public class PrivateMain{ public static void main(String[] args){ System.out.println("This is from main"); } }
命令行操作记录
G:\javaPract>javac PrivateMain.java G:\javaPract>java PrivateMain Error: Could not find or load main class PrivateMain G:\javaPract>java sample.PrivateMain Error: Could not find or load main class sample.PrivateMain G:\javaPract>set CLASSPATH=%CLASSPATH%;. G:\javaPract>echo %CLASSPATH% G:\javaPract;. G:\javaPract>javac PrivateMain.java G:\javaPract>java PrivateMain Error: Could not find or load main class PrivateMain G:\javaPract>java sample.PrivateMain Error: Could not find or load main class sample.PrivateMain G:\javaPract>
目录文件列表
G:\javaPract>dir Volume in drive G is Learning Volume Serial Number is 008F-C257 Directory of G:\javaPract 03/21/2023 08:04 AM <DIR> . 03/21/2023 08:04 AM <DIR> .. 05/17/2023 04:35 PM 280 PrivateMain.java 05/17/2023 04:36 PM 688 PrivateMain.class
遗漏的步骤及解决方法
Java要求包结构必须与文件系统的目录结构完全对应,你的问题就出在这里,需要按以下步骤修正:
- 在
G:\javaPract目录下创建名为sample的文件夹 - 将
PrivateMain.java移动到G:\javaPract\sample目录中 - 回到
G:\javaPract目录,执行编译命令(-d .表示将编译生成的class文件放到当前目录的对应包结构下):javac sample/PrivateMain.java -d . - 最后执行全限定类名运行程序:
java sample.PrivateMain
原因说明
之前编译时没有指定包结构输出目录,生成的PrivateMain.class直接放在了G:\javaPract根目录,而JVM寻找sample.PrivateMain类时,会去G:\javaPract\sample目录下查找对应的class文件,所以找不到导致报错。
内容的提问来源于stack exchange,提问作者sampath
相关产品推荐
相关产品推荐

