找不到或无法加载主类
来源:互联网 发布:linux 查看权限命令 编辑:程序博客网 时间:2024/05/16 09:57
如果你在控制台中运行java, javac, java -version都没问题,那么你遇到的或许是和我同样的问题。
造成这个问题的原因,这要从Java解释器的工作原理说起。
Java解释器的运行过程如下:首先,找到环境变量CLASSPATH(可以通过操作系统,有时也可以通过在你的机器上安装Java或Java-based工具的安装程序来设置。)
CLASSPATH包含了一个或多个目录,用来作为查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠以从CLASSPATH根中产生一个
路径名称(于是,package foo.bar.baz 就变成为foo\bar\baz或foo/bar/baz或者其它什么东东,这一切取决于你的操作系统)。得到的路径会与CLASSPATH中各个不同
的项相连接,解释器就在这些目录查找你要执行的程序相关的.class文件。
第一次学习Java时,遇到这个问题,不知道当时怎么解决的。第二次学习又遇到这个问题,浪费了不少时间。
先来重现问题:
1 新建Java工程
2 新建Class,package名字为main,类名为Test
3 Eclipse在工程目录下新建main文件夹,并在main文件夹中创建文件Test.java
4 完成Hello World程序。更改Test.java文件,其内容更新为:
package main;public class Test {public static void main(String[] args){System.out.println("Hello World!");}}5 cd到Test.java所在的目录
C:\Documents and Settings\Administrator>cd /d F:\workspace\learn\main
F:\workspace\learn\main>javac Test.java
F:\workspace\learn\main>java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: main/Test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
F:\workspace\learn\main>
执行出错
6 正确的方式是cd到main(package名称)所在的目录,然后执行java main.Test
F:\workspace\learn\main>cd ..
F:\workspace\learn>java main.Test
Hello World!
F:\workspace\learn>
如果package名字采用默认的空,这表现在Test.java中没有import package这样的行
那么执行的时候就可以直接输入java Test
这个问题主要需要明白两点:
1 Java解释器根据CLASSPATH的值和类名生成查找路径
2 类名还包括package名称,即package名称是类名的一部分。
- 错误: 找不到或无法加载主类
- eclipse 找不到或无法加载主类
- 找不到或无法加载主类
- Eclipse找不到或无法加载主类
- 找不到或无法加载主类
- 错误:找不到或无法加载主类
- eclipse 找不到或无法加载主类
- 错误: 找不到或无法加载主类
- 错误: 找不到或无法加载主类
- 找不到或无法加载主类
- Eclipse 找不到或无法加载主类
- linux 找不到或无法加载主类
- 找不到或无法加载主类
- 错误: 找不到或无法加载主类
- Eclipse找不到或无法加载主类
- java 找不到或无法加载主类
- 找不到或无法加载主类
- 错误: 找不到或无法加载主类
- 电容触摸屏驱动---基于FT5406
- 【回收站还能有什么秘密?为你揭秘】
- 制作initramfs镜像
- Qt在ubuntu下报cannot connect creator comm sokcet /tmp/qt_temp.cQ2531/stub-socket原因
- 无锁HashMap的原理与实现
- 找不到或无法加载主类
- 【鸟枪当炮 PowerPoint玩刻录】
- POJ 1434 二分
- hdu 1003 Max Sum
- 【WPS快速调整从网上复制的零乱文字】
- 学习Cocos2D-x之路(2)--学习第一个例子
- mfs 分布式文件系统
- SSI开发:spring-pool.xml标准配置模板
- 策略模式