簡體   English   中英

使用cmd提示運行Java程序時出現“找不到或加載主類”錯誤

[英]“Could not find or load main class” Error while running java program using cmd prompt

我正在運行一個簡單的“ HelloWorld”程序。 我在命令提示符下收到此錯誤:

無法找到或加載主類HelloWorld

我已經在系統中設置了CLASSPATHPATH變量。 cmd提示符下,我從保存HelloWorld程序的目錄中運行。 我可以看到類名和文件名相同,並且.class文件在同一目錄中創建。 還有什么可能是問題?

我的示例程序如下所示:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}

當Main類位於包中時,您需要按以下方式運行它:

java <packageName>.<MainClassName>

在您的情況下,應按以下方式運行程序:

java org.tij.exercises.HelloWorld 

您的CLASSPATH值是多少?

它可能看起來像這樣:

 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

我想您的值不包含此.;

因此, 添加IT
完成后, 重新啟動 CMD

那可能行得通。


例如,文件HelloWorld.java位於路徑: D:\\myjavatest\\org\\yz\\test而其package是: org.yz.test

現在,您位於CMD行上的路徑D:\\myjavatest\\
輸入以下內容進行編譯:

javac org/yz/test/HelloWorld.java

然后,鍵入以下內容以運行它:

java org.yz.test.HelloWorld

您可能會得到想要的。

我從CLASSPATH刪除了bin 我發現我正在從HelloWorld.java所在的目錄中執行java命令,即:

C:\\Users\\xyz\\Documents\\Java\\javastudy\\src\\org\\tij\\exercises>java HelloWorld

因此,我移回主目錄並執行:

java org.tij.exercises.HelloWorld

它奏效了,即:

C:\\Users\\xyz\\Documents\\Java\\javastudy\\src>java org.tij.exercises.HelloWorld

你好,世界!!

由於您是從命令提示符運行它,因此需要確保您的類路徑正確。 如果已經設置,則需要重新啟動終端以重新加載系統變量。

如果未使用-classpath-cp且未設置CLASSPATH ,則使用當前目錄( . ),但是在運行.class文件時,您需要位於包含Java包名稱文件夾的文件夾中。

因此,在./target/classes/com/foo/app/App.class擁有.class文件,您./target/classes/com/foo/app/App.class以下可能:

java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App

您可以通過打印CLASSPATH變量來檢查類路徑:

  • Linux: echo $CLASSPATH
  • Windows: echo %CLASSPATH%

其具有條目相隔:

另請參閱: 如何運行Java .class文件?

出現此錯誤的原因之一可能是

找不到或加載主類<class name>

也許您將您的類名用作其他名稱,並用另一個名稱保存該類名,則可以用一個不同於類名的名稱來保存Java源文件名。 例如:

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

您可以另存為Hello.java但是,

編譯: javac Hello.java

這將在相同位置自動生成A.class文件。

現在運行: java A

我遇到了同樣的問題,盡管我沒有程序包名稱,但我的情況有所不同。 我的問題是類路徑,例如:

C:\Java Example>java -cp . HelloWorld 

Java的-cp選項,從我的經驗可以知道(雖然不多),但是嘗試不同的方法時遇到了大約20次錯誤,直到我聲明Path類為止,我都收到相同的錯誤。 維什蘭特說的是正確的。 代表當前目錄。

如果您需要有關java選項的更多信息,請輸入java -? java -help我認為選項不是可選的。

我只是做了一些進一步的研究,發現有一個網站詳細介紹了CLASSPATH 必須將CLASSPATH設置為環境變量。 到當前目錄<。>。 您可以在Windows的命令行中進行設置:

// Set CLASSPATH to the current directory '.'
prompt> set CLASSPATH=.

添加新的環境設置時,需要先重新啟動,然后才能啟用變量。 但是,可以在命令提示符下進行設置。 也可以像我一開始提到的那樣進行設置。 有關更多信息,並且如果您使用其他操作系統,請檢查: 環境變量

使用java -d . HelloWorld執行Java程序java -d . HelloWorld java -d . HelloWorld命令。

聲明包后,此命令有效。

. 代表當前目錄/。

在win10上運行Java時遇到類似的問題

代替

$ java ./hello
Error: Could not find or load main class ..hello

$ java hello
Hello, World

我在運行JAVA類時忘記刪除.class擴展名而遇到了完全相同的錯誤。 所以代替這個:

java myClass.class

一個應該這樣做:

java myClass

我遇到了同樣的問題,並嘗試了此處提到的所有內容。 問題是在創建類之后,我沒有刷新我的項目。 一旦刷新,一切就會按預期進行。

面臨同樣的問題。 通過以下步驟解決

  • 轉到包含“ org.tij.exercises”包的目錄(例如:在eclipse中,它可能是您的src文件夾)
  • 使用java org.tij.exercises.HelloWorld

對於我們很多人,至少對於我來說,我認為類路徑層次結構不直觀,因為我在目錄結構中工作,因此感覺應該是這樣。

Java正在根據其包路徑而不是文件路徑來查看類的名稱。

沒關系,是否:我在本地目錄./packagefoo/MainClass中,或在./packagefoo/上的目錄中,或在./packagefoo/MainClass/foo中的下一個目錄中。

命令“ java packagefoo.MainClass”從根目錄%CLASSPATH%運行,這對Java來說意義重大。 然后從那里遍歷包名,而不是像我們非編碼人員所期望的路徑名。

因此,如果我的CLASSPATH設置為%CWD%/,則“ java packagefoo.MainClass”將起作用。 如果將CLASSPATH設置為%CWD%/ packagefoo /,則找不到packagefoo.MainClass。 如果它是“ package”的成員,則始終是“ java MainClass”沒有任何意義,直到我退出Java代碼“ package packagefoo;”為止。 並將類文件上移目錄。

實際上,如果我更改“ package packagefoo;”, 到“打包foopackage;” 我必須在CLASSPATH / foopackage或foopackage下創建一個子文件夾.MainClass再次停止工作。

更糟糕的是,在Windows的PATH,CLASSPATH,JAVAHOME,JDeveloper,Oracle數據庫及其下安裝的每個用戶名之間,我認為一個試圖快速獲取內容的編碼人員最終會強行強制使用路徑變量和結構,直到出現某種情況在不了解其含義的情況下工作。

至少我做到了。

創建一個文件夾org / tij / exercises,然后移動HelloWorld.java文件。 然后在命令下面運行

javac -cp . org/tij/exercises/HelloWorld.java

java -cp . org/tij/exercises/HelloWorld

我使用IntelliJ創建了我的.jar,其中包括我庫中一些未包裝的jar。 這些罐子之一在清單中有一些簽名的東西,阻止了.jar的加載。 沒有警告或其他任何東西,只是行不通。 Could not find or load main class

取出裝有清單的拆開的罐子將其固定。

我遇到了類似的問題,但這是由於文件目錄中的空格字符導致我保留了Java類。

下面給出了方案以及解決方案:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • 我的Sample.java類保存在目錄“ D:\\ Java Programs \\ Sample.java”中[注意:java類中沒有Package語句]。
  • 在命令提示符下,將目錄更改為“ D:\\ Java Programs \\”,我的程序已編譯,但是由於錯誤“找不到或加載主類”而無法運行
  • 在SOF上所有可能的解決方案都解決了之后(我什么都沒做),我意識到可能是空格導致了我這個問題。
  • 令人驚訝的是,刪除了文件夾名稱空間char ['Java Programs'->'JavaPrograms'],我的程序成功執行了。

    希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM