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