(转)找不到或无法加载主类(Could not find or load main class )

2023-10-31

原文:https://blog.csdn.net/shymi1991/article/details/50540214/ 

当我们试图在命令行编译运行一个简单的java程序HelloWorld.java,编译命令javac HelloWorld.java顺利通过,但是执行运行java HelloWorld却报出:“错误:找不到或无法加载主类 xxx(Error: Could not find or load main class )”,注:Java 1.7以下是这样的Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld.


       为了解决这个问题,就必须知道java是寻找和加载类的原理。首先有个环境变量叫做CLASSPATH,它包含所有Java类文件的目录。如果它找不到我们所运行程序的main方法就会抛出上面的错误。在Eclipse里面编译运行程序很简单,因为它把Classpath设置好了,但是在命令行,你就得自己处理了。CLASSPATH和PATH不同,PATH用于定位系统可执行文件或命令,在Windows系统是扩展名为 .exe, .dll的文件,在Linux系统是 .so文件。Path也用来定位java程序的本地库。CLASSPATH是用来定位类文件或JAR文件,java类加载器通过CLASSPATH来查找和加载类。

       下面用一个例子来演示如何在命令行执行java程序。

项目目录E:\Users\workspace,项目名hellojava,包名com.sommer.learn,类名HelloJava

package com.sommer.learn;
 
public class HelloJava {
    public static void main(String[] args) {
        System.out.println("Hello Java!");
    }
}

如果用Eclipse编译,它的.class文件在E:\Users\workspace\hellojava\bin\com\sommer\learn里面。命令行进入该路径,输入java HelloJava


提示出错,因为这个类的全名是com.sommer.learn.HelloJava,而不是HelloJava。重新输入命令 java com.sommer.learn.HelloJava

为什么还是出错呢?因为我们没有CLASSPATH环境变量,也没有用java命令的-classpath或-cp选项,所以Java默认在当前目录下寻找主类 com/sommer/learn/HelloJava.class,但是我们已经在com/sommer/learn目录里面了,所以找不到类。将目录切换到包的父路径,再来运行一遍

这回终于可以了!

如果想从任意路径来运行程序该怎么办呢?如上文提到的,使用java命令的-classpath或-cp选项,或设置CLASSPATH。先来看第一种

第二种设置CLASSPATH

windows+pause快捷键打开系统属性——高级系统设置——环境变量,在系统变量里新建CLASSPATH(不区分大小写),一般设变量值为 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar,注意最前面有个点号,表示当前路径。

可以在命令行输入echo %CLASSPATH%来查看变量值。如果将本项目E:\Users\workspace\hellojava\bin加在classpath变量值里(用分号跟其他的隔开),则可以在任意路径执行命令 java com.sommer.learn.HelloJava。

但是一般不建议这样设,如果把每个项目的类路径都添加到系统CLASSPATH会造成混乱,建议用java命令的 -classpath选项来指定。

如果在eclipse里运行一个java类时报出“错误:找不到或无法加载主类 xxx”这样的错,一般是项目没有编译,检查菜单栏的Project——Build Automaticlly有没有被勾上。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(转)找不到或无法加载主类(Could not find or load main class ) 的相关文章

  • Java基础语法知识

    一 Java基础知识 Java程序可分为结构定义语句和功能执行语句 结构定义语句 用来声明一个类或方法 功能执行语句 用来实现具体的功能 package homework java程序中最基本的组成单位是类 类的定义格式 public cl
  • java 的JDBC操作

    JDBC java数据库连接 提供了一套数据库操作标准 这些标准需要各个数据库厂商去实现并提供一个驱动程序 目前常见的4类JDBC驱动程序 JDBC ODBC 直接利用微软的ODBC进行数据库连接操作 性能低 一般不推荐 JDBC本地驱动
  • Java中Overriding)和Overload是什么意思?

    一 解释 方法覆盖 Overriding 也叫做 方法重写 重写发生在子类和父类之间 具体实现是子类对父类中一个可访问的 Private 修饰的方法不可被继承 方法的重写 保证其方法名参数的个数 参数的类型不变 重载 Overload 发生
  • 什么是“堆”,"栈","堆栈","队列",它们的区别?

    一 堆 什么是堆 又该怎么理解呢 堆通常是一个可以被看做一棵树的数组对象 堆总是满足下列性质 堆中某个节点的值总是不大于或不小于其父节点的值 堆总是一棵完全二叉树 将根节点最大的堆叫做最大堆或大根堆 根节点最小的堆叫做最小堆或小根堆 常见的
  • (转)找不到或无法加载主类(Could not find or load main class )

    原文 https blog csdn net shymi1991 article details 50540214 当我们试图在命令行编译运行一个简单的java程序HelloWorld java 编译命令javac HelloWorld j
  • ⛳ TCP 协议面试题

    目录 TCP 协议面试题 一 为什么关闭连接的需要四次挥 建 连接却只要三次握 呢 二 为什么连接建 的时候是三次握 可以改成两次握 吗 三 为什么主动断开 在TIME WAIT状态必须等待2MSL的时间 四 如果已经建 了连接 但是Cli
  • HashMap多个构造方法的理解

    1 创建HashMap除了常用的空方法 Map map new HashMap 2 还有一个入参的 这个入参并不是指创建大小为3的HashMap 而是创建大于3的最小2的n次方大小的HashMap 比如3 实际创建的长度为2 2 4 以此类
  • JackSon

    前后端分离开发中常用到的数据交互方式就是json 本文主要讲解对jackson对json的相关操作 jackson 基础篇 1 引入依赖
  • ⛳ Class.forName()方法

    目录 Class forName 方法 特点 举例 Class forName 方法 Class forName 是Java中的一个反射方法 用于根据类的完整限定名 fully qualified name 加载类并返回对应的Class对象
  • 【Java基础·Comparator多字段排序】

    Java基础 Comparator多字段排序 需求 对指定List按照 身份证号 姓名 入学时间倒序排列 版本1 package com biaogexf tools import lombok Data import java util
  • 【Windows系统5分钟搭建Linux环境】

    安装 Linux 虚拟机 第1步 下载 VirtualBox 第2步 下载 Vagrant 第3步 拉取Linux虚拟机镜像 第4步 网络配置 网络地址转换 端口转发 注意 电脑需要开启 CPU 虚拟化 电脑开机时 进入BIOS界面设置 第
  • Java实验5

    1 为某研究所编写一个通用程序 用来计算每一种交通工具行驶1000公里所需的时间 已知每种交通工具的参数都是3个整数A B C的表达式 现有两种工具Car007和Plane 其中Car007的速度计算公式为A B C Plane的速度计算公
  • 什么是环境变量?为什么java要配置环境变量?

    本文是将https blog csdn net qq 37872792 article details 80642985 与 https blog csdn net Pre waist L article details 79696507两
  • 向上转型和向下转型

    一 概念 向上转型是指将子类的实例赋值给父类类型的变量 向下转型是指将父类的实例赋值给子类类型的变量 二 向上转型 1 向上转型后父类的引用所指向的属性是父类的属性 2 如果子类重写了父类的方法 那么父类引用指向的或者调用的方法是子类的方法
  • 关于java中IO的个人理解

    一 什么是java的I O I O中的i为input即输入的意思 O为output输出的意思 所以io为java中数据的输入和输出 这里的数据即包括网络上的数据 socket 也包括本地的文件数据 IO使用流的概念来进行数据的输入和输出也就
  • Java获取当前时间的年月日时分秒方法

    相关内容 package com ob import java text ParseException import java text SimpleDateFormat import java util Calendar import j
  • java中 ‘\b‘ 回退符的使用

    退格符 b b是退格符的意思 将光标回退一个字符的位置 可以结合空白字符使用达到类似删除的效果 1 回退符 b 后面没有内容 的情况 原样输出 回退符 b后面 没有内容 则原样输出 System out println x b x 回退符后
  • Java--集合知识再补充(Map集合)

    下面就是我整理的部分学习笔记 学无止境 加油 为方便对多个对象的操作 就对对象进行存储 集合就是存储对对象最常用的一种方式 数组长度是固定的 且可以存储基本数据类型 集合可变 集合只能存储对象 Collection 下有两个子接口 为Lis
  • JVM的构成 (类加载子系统、执行引擎、运行时数据区)

    目录 JVM由三部分组成 1 类加载子系统 可以根据指定的全限定名来载入类或接口 Java类加载机制 trigger333的博客 CSDN博客 java类加载的机制 2 执行引擎 负责执行那些包含在被载入类的方法中的指令 3 运行时数据区
  • java pakage、import关键字

    package介绍 常用的包 import 案例

随机推荐

  • Composer警告Warning:This development build of composer is over 60 days old......

    今天查看了一下服务器安装的Composer版本 报了一个警告 意思是安装已经超过60天了 需要执行 usr bin composer self update 升级到最新版本 然后我就执行了 再次查看版本确实更新到官方最新的1 7 3版本 但
  • IDEA自动补全返回值的快捷键

    首先 将光标移至方法的末尾 然后 使用 ctrl alt v 示例 补全以前 discoveryClient getServices 补全以后 List
  • 模板方法(template method)c++版本

    大话设计模式中的template method c 版本 template method cpp Created on Jul 24 2017 Author clh01s 163 com 模板方法 include
  • C++基础知识 - deque容器概述

    deque容器概念 deque是 double ended queue 的缩写 和vector一样都是STL的容器 唯一不同的是 deque是双端数组 而vector是单端的 Deque 特点 deque在接口上和vector非常相似 在许
  • c语言输出中文为乱码_C语言输出乱码问题

    题目 要求输出国际象棋棋盘 include include conio h int main int i j for i 0 i lt 8 i for j 0 j lt 8 j if i j 2 0 printf c c 219 219 e
  • QT5.2中新建lib库,在引用时出现error LNK2019: 无法解析的外部符号错误

    1 由于在VS2010中新建QT的lib库时默认的是新建动态链接库 然后我在配置属性中改为lib库 结果生成的lib库在引用是出现error LNK2019 无法解析的外部符号错误 2 error LNK2019 无法解析的外部符号 dec
  • 超越Swin

    作者 科技猛兽 编辑 极市平台 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 目标检测 技术交流群 后台回复 transformer综述 获取2022最新ViT综述论文 导读 本文提出 FCM
  • Java方法和数组练习

    个人简介 作者简介 大家好 我是W chuanqi 一个编程爱好者 个人主页 W chaunqi 支持我 点赞 收藏 留言 愿你我共勉 没有什么比勇气更温文尔雅 没有什么比怯懦更冷酷无情 Java方法和数组练习 1 获取每月天数 根据输入的
  • el-upload 上传视频并回显

    el upload上传视频 并且显示上传的视频
  • python基础编程_25_拷贝函数,copy()

    import copy a 1 2 3 4 a b b a 引用 除非直接给a重新赋值 否则a变则b变 b变则a变 c copy copy a 浅复制 只会拷贝父对象 不会拷贝父对象中的子对象 所以若a的子对象变则c 变 但是父对象变c不会
  • C++利用Poco库实现QT的信号与槽效果

    C 利用Poco库实现QT的信号与槽效果 定义信号类 信号类的使用 定义类型Model main头文件引用 main定义信号发送类 main定义信号接收类 main主函数 引用的Poco库 参考资源 C 利用Poco库实现QT的信号与槽效果
  • Python3,使用Flask来实现接口请求

    Flask之实现接口请求 1 引言 2 Flask 2 1 flask 的环境安装 2 2 flask构建web框架 2 3 flask构建get请求 2 4 flask构建post请求 2 41 代码编写 2 4 2 安装RestClie
  • j2me总结(三)

    高级界面开发 二 本编介绍高级界面下的类 1 Form Form是高级界面中最重要的类 是一个典型的容器控件类 是一个包含多个UI组件的屏幕对象 故名思意 form为表单的意思 在form中可以包含Item类 Form上的每一个元素都会分配
  • vue .number修饰符

    项目中遇到这样一个问题 某个input框用来输入价格之类的数字 我想对input的取值区间做判断 但是发现输入后变成了String类型 所以用了vue中的 number修饰符 这样就可以获得Number类型了 很方便
  • Qt 5 帮助文档的使用

    Qt 5 帮助文档的使用 Qt 5 帮助文档的使用学习图形界面开发 肯定离不开帮助文档的使用 因为它不像 C 语言那样就那么几个函数接口 图形接口的接口可以用海量来形容 常用的我们可能能记住 其它的真的没有必要去记 用到什么就去帮助文档查看
  • C++ 读写CSV文件

    include
  • Java异常之自定义异常类详解和代码举例

    Java语言的异常 异常处理机制 Java中的异常概念 1 异常是程序在运行过程中由于算法问或软件设计等问题导致的程序异常事件 2 异常的前提是可以识别并被捕获的 3 Java以面向对象的方法来处理异常的 Java提供了各种类型的异常类 4
  • 数据结构day1(2023.7.13)

    一 Xmind整理 二 课上练习 练习1 static 全局变量 局部变量作用域 int a 0 全局变量 生命周期和作用于都是从定义开始到整个文件结束 void fun int b 0 局部变量 static int c 0 局部变量 作
  • 2018第一届世界区块链大会 区块链大咖畅谈区块链宏观经济

    2018年4月24日上午 第一届世界区块链大会 三点钟峰会 W B C 在中国澳门召开 以 技术重构世界 为主题 要 驱动幸福世界 链接美好未来 大会由世界区块链联合协会首倡 世界区块链大会组委会 三点钟 深创学院主办 深圳大学区块链研究院
  • (转)找不到或无法加载主类(Could not find or load main class )

    原文 https blog csdn net shymi1991 article details 50540214 当我们试图在命令行编译运行一个简单的java程序HelloWorld java 编译命令javac HelloWorld j