记一次解决cmd中执行java提示"找不到或无法加载主类"的问题
今天遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”。现将该问题的原因以及解决办法记录一下。
先理解一下系统变量path和classpath的作用。
path:可执行命令的搜索路径,在该路径下搜索可以运行的程序或批处理文件。
命令行中输入一个命令,则会在path配置的目录中查找该命令,如果存在则调用该程序运行,如果不存在则提示“ 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件。”
如果要想在cmd中执行java,则需要把java.exe 配置在path系统变量中。由于cmd会搜索path中目录下的文件,因此在实际配置的时候,只需要把../jre/bin 配置到path中即可。这样,在执行java时,操作系统便会自动在../jre/bin 目录下搜索java.exe 可执行程序了。
classpath: 类文件(*.class/*.jar)的存储路径。
java 命令执行时,会读取classpath中配置的目录,然后在该目录下去搜索将要执行的.class文件。如果未搜索到,则会报“找不到或无法加载主类”错误,如果搜索到,则继续运行。
例如:执行命令 java Hello;
则java程序会去在classpath配置的所有目录和文件中取搜索Hello.class文件,找到之后会把该class文件加载到jvm中,为后面的运行做准备。
classpath这个系统变量只是为java使用的,其他程序不会使用该变量。
如上所说,java执行时,会在classpath中搜索 XXX.class 文件,如果找不到则报出"找不到或无法加载主类"的错误。那么在cmd运行的时候,我们会随意的在某个目录下面javac编译,然后java运行程序,那么,该目录未配置到classpath中,java程序又是如何找到该目录的呢?
还记得配置classpath的时候,有一个".;"的配置项吗?其代表的就是执行java命令是的所在目录,也即是当前目录。这样即是把当前目录加入了classpath,因此java执行的时候,会在当前目录中搜索XXX.class 的。
注意,当配置 .; 的时候,一定要注意前面是不是还有其他配置。classpath中多个目录要以;分割,而这里的"."是一个配置项,代表的当前目录,所以,如果"."前面有其他的配置项,则前面同样需要加入";"。
例如:
"."前面有其他配置项,则这样配: ...\bin;.;%JAVA_HOME%\bin.......
"."前面无其他配置项(也即是classpath是以.开始的),则这样配: .;%JAVA_HOME%\bin.......
注意,在配置的时候一定要确定到底是";.;"还是".;", 否则如果配成...\bin.;%JAVA_HOME%\bin.......则就会发生:能够javac编译成功,但是java却无法执行成功的错误。
另:用户变量会覆盖掉系统变量
环境变量不区分大小写
===============================================
原文链接:记一次解决cmd中执行java提示"找不到或无法加载主类"的问题 转载请注明出处!
===============================================
---end--
记一次解决cmd中执行java提示"找不到或无法加载主类"的问题的更多相关文章
- 关于解决cmd中执行java提示"找不到或无法加载主类"的问题
昨天学生遇到一个问题:在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”.现将该问题的原因以及解决办法记录一下. 先理解一下系统变量path和cl ...
- java提示找不到或无法加载主类
背景 默许jdk的配置大家都没有问题,执行java,javac无报错,但今天在尝试在本地起来kafka的时候,提示java 找不到或无法加载主类,然后日志中提示 Files 找不到或无法加载主类:C: ...
- Java 提示“找不到或无法加载主类” 解决方法
1.检查环境变量配置,我的安装路径是F:\java\jdk1.8.0_91,因为是6以上版本,故不需配置Classpath 否则 CLASSPATH=.;%JAVA_HOME%\lib\dt.jar; ...
- 编译和运行java文件 找不到或无法加载主类
这边提供一个关于程序中含有package关键字,使用“终端”运行程序时出现“找不到或无法加载主类”,而使用Eclipse软件可以正常运行程序的可能解决办法. 例如程序名为HelloWorldTest. ...
- java编译通过,为什么运行却提示找不到或无法加载主类?
java编译通过,为什么运行却提示找不到或无法加载主类? https://www.zhihu.com/question/36537093 这边提供一个关于程序中含有package关键字,使用“终端”运 ...
- Java 错误: 找不到或无法加载主类,问题集合
正确编译命令: javac Hello.java 正确运行命令: java Hello 错误1:H:\code>java Hello.java 错误: 找不到或无法加载主类 Hello. ...
- 在命令提示符下,运行Java程序时,提示"找不到或无法加载主类"
小白:在命令提示符下,运行Java程序时,提示"找不到或无法加载主类". 大神:运行Java程序的作用是让Java解释器装载,检验并运行字节码文件(.class).因此,在运行Ja ...
- 命令行中运行Java字节码文件提示找不到或无法加载主类的问题
测试类在命令行操作,编译通过,运行时,提示 错误: 找不到或无法加载主类 java类 package com.company.schoolExercise; public class test7_3_ ...
- java命令提示找不到或无法加载主类
使用java执行命令出现此错误 localhost:SocketDemo wangwei$ javac Server.java localhost:SocketDemo wangwei$ java S ...
随机推荐
- ansible常用模块用法
ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报 分类: Linux(44) ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...
- 【EMV L2】Processing Restrictions
目的: 处理限制(Processing Restrictions)的目的是确定终端中的应用程序与ICC中的应用程序的兼容程度,并进行任何必要的调整,包括可能拒绝交易. 执行条件: 终端应该都要执行Pr ...
- Oracle KEEP 分析函数
Oracle中为了解决子集合中查询最值的问题,提出了KEEP()语法. 典型案列如:在每个部门中找出年龄最小的人中的最高工资. 基本语法结构: MAX(COL2) KEEP (DENSE_RANK F ...
- 新式类单例模式之 __new__()
单例模式: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 类中有一个静态属性__instance,默认为none,重构__new__()方法,判断__instance是否为空,若为 ...
- uniapp如何将微信小程序API封装为Promise
var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/; var CALL ...
- Bellman-Ford算法(在边权可正可负时求最短路)
使用FIFO队列实现: bool bellman_ford(int s){ queue<int > Q; memset(inq,0,sizeof(inq)); memset(cnt,0,s ...
- 小妖精的完美游戏教室——东方PROJECT,同人,th12灵梦A
╮(╯▽╰)╭没办法,小妖精Balous也很讨厌学院化的教育呀,一点意义都没有. 这次就上传东方地灵殿灵梦A逻辑部分的核心代码吧,估计连老师都看不懂.动画部分的代码就不放上来了. //======== ...
- 2018.9.12 B树总结
1. B-Tree B-树是一种平衡的多路查找树,它在文件系统中很有用. 1.1 B-Tree 特性 关键字集合分布在整颗树中: 任何一个关键字出现且只出现在一个结点中: 搜索有可能在非叶子结点结束: ...
- 随笔:关于Class.getSimpleName()
最近学习过程中,遇到了Class.getSimpleName()这个方法,就搜索了一些资料: API定义: Class.getName():以String的形式,返回Class对象的"实体& ...
- github/gitee使用办法2
打开自己的仓库 git pull 把内容复制过去 git add . 添加所有 查看状态 git status 提交 git commit -m 'XXX' 最后push git push 如果内容本 ...