java运行显示“找不到或无法加载主类”!
用javac编译记事本文件成功,并且生成了.class文件,但是用java运行时提示找不到或无法加载主类 展开
该如何解决呢?解决办法如下:
1.由于是在运行阶段出现的问题,那么可能是环境变量配置不当的问题,即可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:
.;%java_home%\lib;%java_home%\lib\tools.jar; (注意前面的 . 以及 ; 缺一不可)
其中.表示当前路径,;表示分隔符。
2.如果你试过了很多次,classpath也配置对了,依旧出现这个错误,注意你使用的测试代码,是否在某一个包名的下面;
比如说如下测试代码:
在文件所在的当前目录下,运行javac TestPlusPlus.java编译成功,生成TestPlusPlus.class文件,这个时
候,你用javaTestPlusPlus想运行程序,总会出现”找不到或无法加载主类“的错误。这个时候要注意,
之所以找不到,是因为TestPlusPlus在HelloWorld包名的下面。
解决办法:
1.去掉 ”package HelloWorld;“ 重新用javac 编译TestPlusPlus.java,再运行javaTestPlusPlus就可以了。
2.新建一个包名一样的文件夹,在本例中,为建立一个HelloWorld的文件夹,把TestPlusPlus.java文件移到该目录下。
然后在HelloWorld文件夹的平级下,打开DOS命令窗口,运行javacHelloWorld/TestPlusPlus.java编译程序,
运行javaHelloWorld/TestPlusPlus(或者javaHelloWorld.TestPlusPlus也可以),则可以运行含有包名的java程序。
注意:包名不要含有'.'(点),' '(空格)等特殊符号,这样的话命令行无法判断包名与java程序名的分割点在哪里,
从而还是找到或者无法加载主类。
原理说明:
java程序运行class文件,对于有包名的类,java把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。
我们的工程路径是D:\HelloWorld,在HelloWorld文件夹中建立一个src文件夹,类B的源代码文件就放在src中。用javac编译完以后会在src文件夹中生成NewsManager.class,如下:
2.执行如下:
3.现在我们再把源代码换成类A。
4.类A中package的路径是org.will.app.main。按照java规定,我们应该按照package定义的路径来存放源文件,类A应该放入:
src\org\will\app\main下,如下:
5.然后我们编译执行:
6.依然有问题,为什么,其实大家再回去看看java的书籍就会发现,一个类的全名应该是包名+类名。类A的全名:org.will.app.main.NewsManager。再试试:
7.仔细看上面的图,我们在main目录下让java命令去执行org.will.app.main.NewsManager,其实它会以为类的路径是:D:\HelloWorld\src\org\will\app\main\org\will\app\main\NewsManager,大家看到了吧,路径重复了。所以,我们应该这样执行:
环境变量配置:
JAVA_HOME:D:\Java\jdk1.8.0_91
CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
解决:
1.把package语句去掉
例如将java文件的package去掉
2.不去掉package,在java文件同级目录加一个package相同名称的文件夹;
HelloWorld.java在src的j2se001文件夹下,j2se001下建一个同package名称的文件夹
或者下面这种,在java类文件同级目录建一个同package名称相同的文件夹