現象:用eclipse等IDE開發工具編譯通過,可以運行,但是用記事本保存dos下可以編譯,不能運行,錯誤顯示“Exception in thread “main” java.lang.NoClassDefFoundError”。
eg:
package com.deco;
import java.util.*;
public class Test{
public static void main(String args[]){
System.out.println(“Hello package!!!”);
}
}
解決過程:1.不可能是環境變量設置錯誤,因為集成開發工具可以運行
2.又用記事本重新寫了個簡單的“Hello package”程序,編譯可以通過,並且完美運行,再次斷定不是環境變量配置的問題。
3.後來將程序裡面的包去掉,重新編譯,可以運行,所以應該是包名引起的。
類中帶有包名的問題,在命令行下運行。
1.當類沒有包時 dos下
javac Test.java //編譯Test類,生產class文件
java Test //運行Test類
2.當有包名情況下 com.deco.Test
javac -d . Test.java //可以生成包的class文件,也就是像開發工具中生成的文件夾
java com.deco.Test //運行這個類(cd進入com目錄然後進入deco去運行Test.class還是會報錯,此時的類名不是Test而是整個的com.deco.Tset)
在你包名的最開始處開始運行java 包名.類名,命令比如你project目錄下你的存放class文件,假設你的class文件是com.xx.my.class,這樣在project目錄下肯定有 com/xx/my這樣的包結構,因為你的CLASSPATH有.這個路徑,現在應該到project目錄下運行java 包名.類名命令如果你直接去projrct/com/xx/my目錄下就會出現你上面的錯誤了,因為你告訴虛擬機是從當前路徑下找類,而當前文件夾下是沒有com/xx /my這個目錄的!!