cmd错误:找不到或无法加载主类 和 错误:找不到符号
背景
在eclipse的文件目录:
这是我写的一个编程基于udp的Ping课设,PingClient.java文件是客户端,PingServer.java是服务器端,ThreadServer.java是服务器的线程,在PingServer.java中调用了ThreadServer.java!在eclipse中运行一切正常,没有任何错误!
在文件资源管理器中的目录:
问题及解决方法
1、错误:找不到符号
原因:PingServer.java中调用了ThreadServer.java,javac编译器编译PingServer.java时不会去编译ThreadServer.java,这个跟ThreadServer.class文件存不存在没有关系,即跟ThreadServer.java有没有被编译过没有关系,关键是编译器需要在编译PingServer.java时,在调用ThreadServer.java语句处要重新编译ThreadServer.java
解决方法:同时编译PingServer.java和ThreadServer.java
2、找不到或无法加载主类
先说明一下,这个跟JDK的环境配置没有太大的关系,如果eclipse中能正常运行的话,证明JDK没毛病。看到网上有很多方法说需要在CLASSPATH环境变量中添加点(.),还有的说用户变量会覆盖系统变量之类的,我照着网上的方法试着修改了,也重启电脑了,都没有用。实际上,如果使用的是1.5以上版本的JDK,完全可以不用设置CLASSPATH环境变量。
1.5以上版本的JDK不设置CLASSPATH环境变量:JRE会自动在当前路径寻找Java类
1.5以上版本的JDK设置了CLASSPATH环境变量:JRE将会按照该环境变量指定的路径来搜索Java类,这时候就需要在CLASSPATH变量中添加点(.),JRE才会在当前路径下寻找Java类
原因:路径不对引发的错误
解决方法:删掉CLASSPATH环境变量(前提是1.5以上版本的JDK,重启生效!!!)
(1)第一种方法:去掉 package
把每一个类中的package语句都注释掉,这个会引发eclipse报错,但是在cmd里面是可以正常运作的。
注意:此时cmd路径指向class文件所在的文件夹,即例子中的E:\eclipse-workspace\udp_Ping\src\service,在此路径下用java命令行运行class文件时,由于package语句的存在,所以编译器实际在这个路径E:\eclipse-workspace\udp_Ping\src\service里再找一个service文件夹,即在E:\eclipse-workspace\udp_Ping\src\service\service里寻找class文件,就导致了找不到主类错误了。
改完之后,在cmd里面要重新编译各个类!
运行结果:正确
(2)第二种方法:(推荐!!!)不删 package语句
注意:每一次在eclipse中修改了代码,在cmd中都要重新编译java文件
cmd中路径指向E:\eclipse-workspace\udp_Ping\src
运行结果:正确
以上,就是我在这次课设中碰到的两个错误,本人也是小白一个,上述有什么错误地方,欢迎大佬指出!