博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java命令运行class文件,报“找不到或无法加载主类”错误
阅读量:4362 次
发布时间:2019-06-07

本文共 1186 字,大约阅读时间需要 3 分钟。

在使用命令行进行java程序的编译和运行时,报“ 找不到或无法加载主类”的错误。

首先,在ide中是可以正常编译和运行的。查找了部分的解决方案,很多人提供的思路是环境变量设置有误,但检查

环境变量等均无问题,在参阅了文章:

http://www.cnblogs.com/wangxiaoha/p/6293340.html

之后,发现产生错误的原因是对package,类路径以及java编译器及虚拟机查找文件的模式不理解,以至命令行输入混乱。进而查阅书籍,在《Java核心技术卷1》中对Windows系统下使用命令行运行java程序,类路径以及包之间的关系有较为详细的阐述,总体来说有一下几点需要注意。

1.编译器在编译源文件的时候不检查目录结构。但是如果包和目录不匹配,虚拟机就找不到类。

所以在出现问题后,发现编译总能通过,但是运行时会报错。

2.编译器对文件进行操作,而java解释器加载类

eg:javac com/mycompany/PayrollApp.java

  java com.mycompany.PayrollApp

Oracle官方也提出了初学者易犯的错误就包括使用java xx.class的形式运行程序

A common mistake made by beginner programmers is to try and run the java launcher on the .class file that was created by the compiler. For example, you'll get this error if you try to run your program with java HelloWorldApp.class instead of java HelloWorldApp. Remember, the argument is the name of the class that you want to use, not the filename.

3.javac编译器总是在当前目录查找文件,但是Java虚拟机尽在类路径中有"."目录的时候才看当前目录。如果没有设置类路径也不会有什么问题,默认的类路径包含"."目录,然而设置了类路径却忘记包含"."目录,程序任可通过编译但是无法运行。

第三条是导致今天发现的错误的直接原因

当我们没有在程序中定义package的时候,直接在文件目录下进行编译和运行并不会出现问题

当我们加上package后

我们可以通过编译但是无法运行,这就是类路径与目录不匹配造成。

 

按照第三条中的描述,添加了"."的包,让解释器在demo目录下搜索文件,问题解决。

 

转载于:https://www.cnblogs.com/limushu/p/9359138.html

你可能感兴趣的文章
前端必读:浏览器内部工作原理
查看>>
Uri、URL和URN三者的区别
查看>>
数据字典的转换
查看>>
单例对象的创建与销毁
查看>>
知识点关键词(记录一下)
查看>>
国际结算业务
查看>>
嵌套循环概念
查看>>
ASP.NET MVC Model绑定(二)
查看>>
一步一步写算法(之hash表)
查看>>
漫谈并发编程(一) - 并发简单介绍
查看>>
JDBC连接MySQL数据库及演示样例
查看>>
Beta 冲刺(1/7)
查看>>
修改 Vultr 登录密码
查看>>
CSS学习
查看>>
Centos 安装lnmp完整版
查看>>
【转】Eclipse和PyDev搭建完美Python开发环境(Ubuntu篇)
查看>>
Differences between page and segment
查看>>
字符串之strcmp
查看>>
最长公共子序列(不连续)
查看>>
微服务:Java EE的拯救者还是掘墓人?
查看>>