Windows cmd命令行运行Java 错误:找不到或无法加载主类
使用Windows自带cdm窗口运行Java提示错误:
1.检查当前进入的路径下是否包含class文件
class文件是java虚拟机能识别的二进制文件,由java文件编译生成。运行java程序时,“.java”后缀文件并不是必须的,只要有class文件就可以运行。一般通过IDE开发工具开发Java项目时,class和java文件会被分别生成到不同目录,因此从cmd运行java程序时会找不到class文件,导致上述错误。因此可以将class文件和java文件拷贝到同一个目录中。
2.检查Java程序(“.java”后缀文件)代码内容:
- Java保存的文件名必须与类名一致;
- 如果文件中只有一个类,文件名必须与类名一致;
- 一个Java文件中只能有一个public类;
- 如果文件中不止一个类,文件名必须与public类名一致;
- 如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
另外,通过java文件使用javac命令生成class文件时,class文件的文件名也将与java文件的文件名保持一致。
3.检查环境变量配置,具体可以百度如何配置环境变量,尤其是:
在classpath的最前面要加一个本目录路径,用”.“表示,如果后面还有其他路径内容,则“.”要加“;”进行分隔表示。注意都是英文状态下的字符。
这样在运行java命令运行程序时,才会在当前路径下搜索到包含当前类的class文件。
4.打开cdm跳转到class文件所在路径后再运行
在cmd下运行javac 和java的时候,必须在该java文件的目录下运行,这样生成的class也在该目录下,java的时候也会第一个就在本目录下找class文件,就不会提示找不到了。进入cmd就会直接到c:\个人文件夹下,而一般的java文件会用其它软件编写,放在选定的路径下,这两个路径很少能主动重合,因此需要注意。
5.运行命令
使用“javac(空格)文件名.java”命令编译当前java文件,如果没有报错则会生成class文件,待生成class文件后,使用“java(空格)类名”的方式运行代码。注意此处使用java命令时,后面不能带有“.class”后缀或“.java”后缀,通过tab键是默认给加后缀的,运行前建议最先检查下,如果加了需要把“.class”删除。
6.关于路径问题,如果java代码中包含“包”的声明,需要特别注意
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包语句的语法格式为:package pkg1[.pkg2[.pkg3…]]; 通常放在文件的最开头。
在包下的类,需要在“.java”文件所在目录使用javac进行编译(会在当前目录生成class文件),然后返回包的最外层目录运行,包名的嵌套关系使用“.”进行连接,最后跟上类名,例如:“java pkg1.pkg2.classname”。
7. 使用windows自带的cmd或者编程工具提供的虚拟Terminal窗口或者PowerShell均可以运行java代码,但PowerShell的输入重定向不同于cmd。cmd中才可以使用“ < "进行输入重定向。
PowerShell中的输入重定向:
PowerShell中使用“ < "会报错:
8.运行时出现错误Error: A JNI error has occurred, please check your installation and try again
原因是:使用了不同java版本的javac和java命令,即编译java程序的java版本和运行java程序的java版本不同。
可以使用如下命令比对一下版本:
javac -version
java -version
解决方法:
①卸载电脑上多余的java版本,仅保留一个,可以手动卸载,也可以使用java官网有专门的卸载工具,地址:https://www.java.com/zh_CN/download/faq/remove_olderversions.xml
②检查电脑环境变量设置,将多余版本的环境变量删去。
③强制使用同一种版本的java和javac,可以通过编程工具带有的虚拟环境完成,例如在idea中直接编译运行。
如有其他问题及解决方法欢迎在评论区补充交流!
参考链接 :
http://xinzhi.wenda.so.com/a/1523443002618642
https://www.cnblogs.com/baby-zhude/p/7918724.html
https://blog.csdn.net/zhaofen_7/article/details/90273128
https://jingyan.baidu.com/article/fdffd1f876ca76f3e88ca14c.html