java无法找到或加载主类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java无法找到或加载主类相关的知识,希望对你有一定的参考价值。

问题描述~:在cmd命令中输入java -version 能查询到版本 而且使用javac 和java都有效,应该不是环境没配置好吧?
然后把我所写的程序放到eclipse上运行,可以正常运行,那也不会是程序代码有问题吧?
刚学java编个HELLO WORLD就出问题了,郁闷啊,各位大哥们帮忙啊~!
javac Test.java(编译没有问题)
java Test就出现(错误:无法找到或加载主类 Test)了。
而且类名和文件名字也是一致的。
求助啊~!!!
class Test

public static void main(String [] args)

System.out.println("Hello World");


不是package的问题,package是我开了eclipse后再另外加上去的,上面的就是用editplus写的代码

两种可能,
第一,先运行java -cp . Test
试试,如果可以,说明系统classpath里面没设置一个当前目录,就一个点 .

第二,Test.java里用了包(package),
编译时要用 javac -d . Test.java
运行时要用java package.pathto.Test (把类的包全名加上)

这两种必居其一。追问

感谢这位大哥,弄了那么久原来是classpath没配置好,确实是少了一个点。感谢啊~!还想问问,其实编写JAVA程序直接用eclipse就好了,为什么还要那么烦用文档编辑器编写然后在CMD里面运行呢?
还有的就是,学JAVA好像还有TOMCAT,还有spring框架等很多东西,好像TOMCAT这些装了eclipse后还要在网上下载其他东西下来装,那么会不会直接用Myeclipse就不用装其他插件那么麻烦呢?
刚学JAVA,希望大哥能给点帮助解释一下,感谢~!

追答

用文档编辑器其实就是为了熟悉一下java的这些工具的原理,另外在没有工具的情况下也可以快速做一些基本工作。(你看好多书都推荐你先用一下ultraedit ,而不是一上来用eclipse, eclipse这些都会帮你弄好,但是它的设置细节太多,你容易在初学时就被导入一些细节中去)。

tomcat这些,也是一样的道理,你先用它的配置文件做一些工作,比如改改端口,复制个war文件过去啥的,等明白一些基本原理,再用myeclipse, eclipse之类的快速开发,否则很容易知其然不知其所以然。我的建议是,不要贪图过快,基础要明白,有些基础知识甚至要回过头来细看。

参考技术A 包package名字的问题。
你的类里肯定写了package XXX;
就是打包了。所以你在eclipse中运行没问题,用java命令就不行了。
你可以在当前路径下,建个文件夹,取类中package的名字。把XX.class放在该文件夹下,
在java命令运行就可以了追问

class Test

public static void main(String [] args)

System.out.println("Hello World");


不是package的问题,package是我开了eclipse后再另外加上去的,上面的就是用editplus写的代码

追答

。。。。

参考技术B 代码贴出来看看追问

class Test

public static void main(String [] args)

System.out.println("Hello World");

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把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。

参考技术A

    我们的工程路径是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,大家看到了吧,路径重复了。所以,我们应该这样执行:

参考技术B

你这个执行失败的原因是文件名与类名不一致,你的文件名是Untitled1,类名都没有起

可以把类名也叫Untitled1就OK了

public class Untitled1
public static void main(String[] args) 
System.out.println("hiiiiiiiiiiiii");

参考技术C

环境变量配置:

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名称相同的文件夹

参考技术D

我这是最好的方法,不用再纠结class path了。

采用方法:直接把CLASSPATH删掉,不用非得写成这个样子.;%java_home%\\lib;%java_home%\\lib\\tools.jar;

记得修改以后必须要**重启cmd**,每次外部的更改,都必须重启cmd以后才会显示

以上是关于java无法找到或加载主类的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 构建失败:无法找到或加载主类

java中无法加载或找不到主类

java找不到或无法加载主类

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

java中找不到主类是啥问题

IntelliJ IDEA 错误:无法找到或加载主类 GradleStart