1. 程式人生 > >記一次解決cmd中執行java提示"找不到或無法加載主類"的問題

記一次解決cmd中執行java提示"找不到或無法加載主類"的問題

提示 .com nbsp 大小寫 環境變量 spa 文件中 .exe 輸入

今天遇到一個問題:在cmd命令行中,用javac編譯java文件可以成功,但是用java執行卻提示“找不到或無法加載主類”。現將該問題的原因以及解決辦法記錄一下。

先理解一下系統變量path和classpath的作用。

path:可執行命令的搜索路徑,在該路徑下搜索可以運行的程序或批處理文件。
  命令行中輸入一個命令,則會在path配置的目錄中查找該命令,如果存在則調用該程序運行,如果不存在則提示“ ‘XXX‘ 不是內部或外部命令,也不是可運行的程序或批處理文件。”
  如果要想在cmd中執行java,則需要把java.exe 配置在path系統變量中。由於cmd會搜索path中目錄下的文件,因此在實際配置的時候,只需要把../jre/bin 配置到path中即可。這樣,在執行java時,操作系統便會自動在../jre/bin 目錄下搜索java.exe 可執行程序了。

classpath: 類文件(*.class/*.jar)的存儲路徑。
  java 命令執行時,會讀取classpath中配置的目錄,然後在該目錄下去搜索將要執行的.class文件。如果未搜索到,則會報“找不到或無法加載主類”錯誤,如果搜索到,則繼續運行。
  例如:執行命令 java Hello;
    則java程序會去在classpath配置的所有目錄和文件中取搜索Hello.class文件,找到之後會把該class文件加載到jvm中,為後面的運行做準備。
  classpath這個系統變量只是為java使用的,其他程序不會使用該變量。

如上所說,java執行時,會在classpath中搜索 XXX.class 文件,如果找不到則報出"找不到或無法加載主類"的錯誤。那麽在cmd運行的時候,我們會隨意的在某個目錄下面javac編譯,然後java運行程序,那麽,該目錄未配置到classpath中,java程序又是如何找到該目錄的呢?

還記得配置classpath的時候,有一個".;"的配置項嗎?其代表的就是執行java命令是的所在目錄,也即是當前目錄。這樣即是把當前目錄加入了classpath,因此java執行的時候,會在當前目錄中搜索XXX.class 的。

註意,當配置 .; 的時候,一定要註意前面是不是還有其他配置。classpath中多個目錄要以;分割,而這裏的"."是一個配置項,代表的當前目錄,所以,如果"."前面有其他的配置項,則前面同樣需要加入";"。
  例如:
    "."前面有其他配置項,則這樣配: ...\bin;.;%JAVA_HOME%\bin.......
    ".

"前面無其他配置項(也即是classpath是以.開始的),則這樣配: .;%JAVA_HOME%\bin.......
  註意,在配置的時候一定要確定到底是";.;"還是".;", 否則如果配成...\bin.;%JAVA_HOME%\bin.......則就會發生:能夠javac編譯成功,但是java卻無法執行成功的錯誤。

另:用戶變量會覆蓋掉系統變量

  環境變量不區分大小寫

===============================================

原文鏈接:記一次解決cmd中執行java提示"找不到或無法加載主類"的問題 轉載請註明出處!

===============================================

---end--

記一次解決cmd中執行java提示"找不到或無法加載主類"的問題