记一次解决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 ...
随机推荐
- 安装activeMQ(window,linux系统)
今天学习了activeMQ服务器,把它说成成服务器是我的理解,,呵呵,首先,说一下它的安装, 官网:http://activemq.apache.org/overview.html window下的安 ...
- Linux环境下mysql主从同步环境搭建
#my.cnf添加内容vim /etc/my.cnf添加以内容: ## replicationserver_id=195binlog-ignore-db=mysqlbinlog_format=mixe ...
- socket 简单了解
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的 ...
- http协议常见状态码含义
状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 2xx:成功--表示请求已被成功接收.理解.接受 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. ...
- angular6 导出json数据到excal表
1 首先使用npm下载插件依赖的安装包 npm install file-saver --save npm install xlsx --save 2 引入项目中的ts文件中 impo ...
- 小妖精的完美游戏教室——人工智能,A*算法,启发因子篇
//================================================================//// Copyright (C) 2017 Team Saluk ...
- js相关用法
一.location1.返回当前网址urllocation.href2.设置跳转网址urllocation.href = "http://www.baidu.com"3.重载刷新l ...
- linux磁盘分区笔记
磁盘基本概念: 硬盘结构:盘片+磁头(盘片可以有多个),工作时盘片高速运转,磁头读取数据 U盘.SSD固态硬盘是用闪存来制作的设备,没有盘片和磁头 Linux磁盘文件名: Linux所有设备都抽象为文 ...
- 在n个任意不相同的数中,输出r个数的组合,并且n和r由键盘输入。
主要是运用递归的思想,函数主要两个参数,point是上一次取到的位置,picked主要记录在数组b中所取的元素的个数,函数的每一轮递归都会取一个数. package pack; import ja ...
- MongoDB4.0 WINDOWS环境下 副本集、分片部署
部署开始: 创建路径 D:\Program Files\MongoDB\MySet下 config Data log 文件夹 config文件夹下准备配置文件: 分片1的副本集1 storage: d ...