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實用教程

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