NoClassDefFoundError的错误--涉及内部类的java程序在控台运行就会报的错误

1、问题原因:

这个问题的原因是内部类的class文件没找到
所以才会出现NoClassDefFoundError(运行时类找不到)
记录下我为什么出现这个错误:
使用idea编译java文件,万万没想到idea竟然是不会生成内部类的class的,但是idea只生成的主类class在idea上运行是没有错误的,将idea编程生成的主类class单独到到了控制台运行,当一但调用关于内部类的代码时就会报NoClassDefFoundError,这一度让我以为我找到了jdk的bug,人傻了都。
在这里插入图片描述

2、问题解决:

若是涉及内部类的java程序,需要在控制台运行其class文件,
就需要也在控制台利用原始jvm编译器编译,
这样就会生成主类的class和内部类的class**。

一般内部类的class文件名字都是主类名$内部类的名字,匿名内部类class文件名字时主类名$1

  • 示例:
    1、ThreadTest .java (匿名内部类)
public class ThreadTest {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                System.out.println("爬爬");
            }
        });
        thread1.start();

    }
}

2、控制台编译

javac -encoding UTF-8 ThreadTest.java

会生成两个class
在这里插入图片描述
3、运行

java ThreadTest

在这里插入图片描述
执行成功!!!

额外的,若是希望文件夹下不要主类内部类等等过多的问价,可以对主类和内部类打包成jar,打包成jar的方法可以参考如下:
class打包jar实用教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章