记一次解决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--

原文地址:https://www.cnblogs.com/PerkinsZhu/p/9766400.html

时间: 2024-10-13 12:45:23

记一次解决cmd中执行java提示"找不到或无法加载主类"的问题的相关文章

编译和运行java文件 找不到或无法加载主类

这边提供一个关于程序中含有package关键字,使用"终端"运行程序时出现"找不到或无法加载主类",而使用Eclipse软件可以正常运行程序的可能解决办法. 例如程序名为HelloWorldTest.java,程序中含有package helloWorld语句,而该包位于javatest目录下,即javatest/helloWorld/HelloWorldTest.java. 应该在java文件所在的目录运行javac指令,即在helloWorld目录中运行java

命令行中编译执行报错提示“找不到或无法加载主类”

1.没有配置JAVA_HOME和CLASSPATH,只配了Path(D:\Program\Java\jdk1.8.0_161\bin),验证可以编译执行: 2.java源文件路径:F:\workspace0408\HelloWorld\src: 3.源文件如下: 1 package test; 2 3 public class HelloWorld { 4 public static void main(String[] args) { 5 System.out.println("Hello W

java编译通过,为什么运行却提示找不到或无法加载主类?

https://www.zhihu.com/question/36537093 这边提供一个关于程序中含有package关键字,使用“终端”运行程序时出现“找不到或无法加载主类”,而使用Eclipse软件可以正常运行程序的可能解决办法. 例如程序名为HelloWorldTest.java,程序中含有package helloWorld语句,而该包位于javatest目录下,即javatest/helloWorld/HelloWorldTest.java. 应该在java文件所在的目录运行java

java 错误:找不到或无法加载主类的解决办法

此类错误的常见解决办法: 1.是因为.java文件不在项目的src路径内,也就是说源代码未被eclipse编译,字节码不存在无法运行了在项目名上右键 -> Builder Path -> Configure Build Path -> 选择Source面板 再点Add Folder, 把源代码所在的包路径的上层目录加进来,而且如果你是把两个类写在一个文件里的话,你在右键选择Run As Java Appication 的时候,要把光标至于包括main方法的类上 2.最快捷的解决办法是,打

安装java后,运行时提示找不到或无法加载主类 com.sun.tools.javac.Main

这个在我们班有不少同学遇到,想到初学者这种问题可能不在少数,我这里就对这个问题说一下原因与解决方法吧. 原因很简单: 首先,JDK是开发环境  JRE是运行环境 JDK安装包中包含JRE. 安装JDK的时候会提示两次安装目录,第一次是JDK安装目录,第二次是JRE的安装目录.遇到这种问题的朋友是把JDK与JRE安装在了同一目录下导致的. 解决办法: JKD安装时将两次目录选择放在不同的目录就可以了,比我的JDK安装目录是D:/JAVA/JDK    JRE安装目录是D:/JAVA/JRE 这样问

java 错误: 找不到或无法加载主类

这个问题应该很常见的,笔者经常手工编译一些测试代码或者小工具,经常用到 javac和java来编译并运行一些简单的小工具. 以Hello World来测试. HelloWorld.java public class HelloWorld{ public static void main(String[]args) { System.out.println("the romatic greet of programmer all over the world:Hello World!")

javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题

javac编译成功,用java运行class文件出现"找不到或无法加载主类" 的问题所在很简单 入门就遇到这样的问题,环境变量按网上说的配好了,直接java 和 javac都有提示出来,说明没问题了, 做了一个简单java,放在e盘根目录下,在c:下操作javac该java文件成功了,但用java 该class时却提示"找不到或无法加载主类" ,忙活了半天,找了些资料,发现其实很简单,不是语句错误,是路径问题classpath的问题. 主要是以下两点要注意: 1.在

Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正常运行,而java命令有时可以正常运行,有时却不可以,不可以的症状就是显示“找不到或无法加载主类”. 在网上找了各种资料,最终发现是因为代码里含有package语句,所以无法在cmd下运行java命令解释.class文件.而那些可以运行的文件就是因为没有使用package语句. 我这种问题的解决方法

Java编译时报错“错误: 找不到或无法加载主类”的解决方法

一.问题描述 java在执行的时候,会遇到这样的报错,编译可以正常通过,只是执行java命令时会报错,例如: G:\1\JavaPrac\tankproject\src\tank1>javac TankGame1.java G:\1\JavaPrac\tankproject\src\tank1>java TankGame1错误: 找不到或无法加载主类 TankGame1 二.解决方法 主要是配置环境变量可能有问题,着重检查环境变量. 环境变量配置: 第一步: "变量名":J