修復 Java 中無法找到或載入主類錯誤

Mohammad Irfan 2023年10月12日
  1. 在 Java 中由於傳遞了錯誤的名稱而無法找到錯誤
  2. 由於 Java 中的包名稱錯誤,無法找到錯誤
  3. 由於 Java 中的 CLASSPATH 錯誤,無法找到錯誤
修復 Java 中無法找到或載入主類錯誤

本教程介紹了 Java 中無法找到或載入主類錯誤。

假設我們已經編寫了一段程式碼並編譯了它。到目前為止,一切正常,但是當我們最終執行它時,出現了一個錯誤。

could not find or load main class

本教程將討論為什麼會發生此錯誤以及如何解決它。讓我們首先回顧一下如何使用命令提示符執行 java 程式。

首先,我們使用 javac 命令編譯程式碼,如下所示:

javac<.java file name>

執行上述命令後,將在當前資料夾中建立一個副檔名為 .class 的檔案。

.class 檔案將具有與 .java 程式相同的類。然後我們使用以下命令執行 .class 檔案來執行 Java 程式碼:

java<classname>

我們可能會收到 could not find or load main class 錯誤。此錯誤是執行時錯誤,當 Java 虛擬機器無法找到我們試圖執行的主類(包含 main 方法的類)時發生。

此錯誤最常發生在使用命令提示符執行我們的 Java 程式時。在討論這個錯誤的原因之前,讓我們先了解一下 CLASSPATH。

Java 中的類路徑

這是 executable.class 和其他資原始檔。

JVM 使用它來定位檔案。除非我們在系統變數中明確設定 CLASSPATH,否則預設的 CLASSPATH 是當前目錄。

要執行程式,我們需要傳遞類名。我們以下面的例子來說明這一點:

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

讓我們首先使用 javac 命令編譯它:

C :\Users\User\Documents\DelftStack\java
    > javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
    >

執行上述命令後,在當前目錄中建立了一個 DelftStack.class 檔案。讓我們使用 java 命令執行該檔案。

C :\Users\User\Documents\DelftStack\java
    > java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class

在這裡,我們得到一個錯誤,因為我們正在嘗試執行 .class 檔案。相反,我們只需要傳遞類名。

往下看:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

在 Java 中由於傳遞了錯誤的名稱而無法找到錯誤

當我們傳遞錯誤的類名時,也可能出現找不到或載入主類。繼續前面的示例,如果我們嘗試使用錯誤的名稱執行程式,如下所示:

C :\Users\User\Documents\DelftStack\java > java DelftStac Error
    : Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
    : DelftStac

我們收到上面的錯誤是因為我們拼錯了類名。在這裡,JVM 試圖執行一個名為 DelftStac 的類,但它並不存在。

我們可以通過正確拼寫類名來解決這個問題,如下所示:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

我們還應該注意,類名是區分大小寫的。如果我們執行類 Delftstack,我們會得到一個錯誤。

往下看:

C :\Users\User\Documents\DelftStack\java > java Delftstack Error
    : Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
    : Delftstack(wrong name
                 : Delftstack)

我們應該使用正確的拼寫和正確的大小寫來成功執行檔案。

由於 Java 中的包名稱錯誤,無法找到錯誤

讓我們將 DelftStack 類移動到 com.DelftStack 包中。包用於將相似的類保持在一起。

看下面的程式碼:

package com.DelftStack;

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

要在 Java 中編譯包,我們使用以下命令:

javac - d.<.java file name>

-d 標誌開關用於告訴將生成的類檔案儲存在哪裡。這 表示當前目錄。

我們將上面的程式碼編譯如下:

C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java

執行上述命令後,在我們的當前目錄中建立了以下資料夾結構。

com\DelftStack\DelftStack.class

正如我們所看到的,我們的類檔案是我們當前目錄深處的兩個資料夾。因此,如果我們嘗試像以前那樣執行我們的類檔案,我們會得到一個錯誤。

C :\Users\User\Documents\DelftStack\java > java DelftStack Error
    : Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
    : DelftStack

此錯誤的原因是當前資料夾中不存在 DelftStack 類。要執行包中存在的類,我們需要傳遞其完全限定名稱(在本例中為 com.DelftStack.DelftStack)。

C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack

這告訴 Java 在 com\DelftStack 資料夾中查詢類。

由於 Java 中的 CLASSPATH 錯誤,無法找到錯誤

CLASSPATH 告訴 JVM .class 檔案在哪裡。

假設我們當前在不同的資料夾中,並且我們想要執行一個 Java 程式,其類檔案存在於不同的資料夾中。在這種情況下,我們可以使用 -classpath 選項傳遞類檔案的位置。

例如:

java - classpath XYZ / ABC < class name
>

上面的命令告訴 Java 在 ZYX/ABC 資料夾中查詢 .class 檔案。

在前面的例子中,我們建立了一個包。

假設我們要執行 com/DelftStack 資料夾中的檔案。使用以下命令,我們可以這樣做:

> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack

../ 表示父目錄。所以 ../../意味著查詢兩個目錄級別。

讓我們再舉一個例子,假設我們在桌面(資料夾)位置,我們想在計算機的其他地方執行一個類檔案。我們可以通過以下方式做到這一點。

> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack

-cp 標誌是 -classpath 的簡寫。在這裡,我們傳遞了存在 .class 檔案的資料夾的完整位置。

相關文章 - Java Error