首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

CMD 命令行編譯運行 Java 程序報 NoClassDefFoundError 根因與解決方案

     編輯:Java 綜合教學

從包結構到 classpath:徹底搞定命令行 Java 運行報錯

新手在 CMD 下 javac/java 最常遇到的 NoClassDefFoundError,**90% 由包名與運行目錄不匹配引起**。本文用一個帶包結構的 HelloWorld 為例,演示正確的編譯、運行目錄與命令參數。

項目結構

E:\Work\MyJava\SocketDemo\src\cn\wgh\socket\HelloWorld.java
package cn.wgh.socket;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

錯誤示範

E:\Work\MyJava\SocketDemo\src\cn\wgh\socket> java HelloWorld
錯誤: 找不到或無法加載主類 HelloWorld

原因:類的全限定名是 cn.wgh.socket.HelloWorld,JVM 會從 **classpath 根目錄** 按包路徑查找 cn/wgh/socket/HelloWorld.class。

正確操作步驟

  1. 編譯(在 src 目錄下,輸出到同級 classes 目錄):
    E:\Work\MyJava\SocketDemo\src> javac -d ../classes cn/wgh/socket/HelloWorld.java
  2. 運行(在 classes 目錄下,指定全限定類名):
    E:\Work\MyJava\SocketDemo\classes> java cn.wgh.socket.HelloWorld
    Hello world!

關鍵原則總結

操作當前目錄命令關鍵點
編譯源碼根目錄(含包結構)javac -d 輸出目錄 包路徑/類名.java
運行字節碼根目錄(輸出目錄)java 全限定類名
  • 若需引用外部 JAR:java -cp .;lib/* 全限定類名(Windows 用分號,Linux 用冒號);
  • IDE 會自動處理這些細節,命令行下必須**手動對齊包路徑與 classpath**;
  • 圖解流程見原文截圖:CMD編譯運行流程圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved