web-dev-qa-db-ja.com

cmdプロンプトを使用してJavaプログラムを実行中に「メインクラスを見つけられないか、ロードできませんでした」エラー

シンプルな「HelloWorld」プログラムを実行しています。コマンドプロンプトでこのエラーが表示されます。

メインクラスHelloWorldを検索またはロードできませんでした。

システムにCLASSPATHおよびPATH変数を設定しました。 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!!");
  }
}
32
user241702

Mainクラスがパッケージ内にある場合、次のように実行する必要があります。

Java <packageName>.<MainClassName>

あなたの場合、次のようにプログラムを実行する必要があります。

Java org.tij.exercises.HelloWorld 
38
Kakarot

あなたのCLASSPATH値は何ですか?

次のようになります。

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

あなたの値にはこの.;が含まれていないと思います。

したがって、ADD IT
完了したら、再起動 CMD

うまくいくかもしれません。


たとえば、ファイルHelloWorld.JavaはパスD:\myjavatest\org\yz\testにあり、そのpackageorg.yz.testです。

これで、CMD行のD:\myjavatest\パスにいます。
これを入力してコンパイルします。

javac org/yz/test/HelloWorld.Java

次に、これを入力して実行します。

Java org.yz.test.HelloWorld

あなたが欲しいものを手に入れるかもしれません。

18
youngzy

binからCLASSPATHを削除しました。 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

こんにちは世界!!

12
user241702

コマンドプロンプトから実行しているため、 classpath が正しいことを確認する必要があります。既に設定している場合は、ターミナルを再起動してシステム変数を再ロードする必要があります。

-classpathおよび-cpが使用されず、CLASSPATHが設定されていない場合、現在のディレクトリが使用されます(.)。ただし、.classファイルを実行する場合は、 Javaパッケージ名 フォルダーで構成されるフォルダーに入れます。

.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ファイルの実行方法

4
kenorb

このエラーの理由の1つは

メインクラス<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

3
Adnan

私は同じ問題を抱えていました。パッケージ名はありませんでしたが、私は少し違っていました。私の問題は、例えばクラスパスでした:

C:\Java Example>Java -cp . HelloWorld 

Javaの-cpオプションと、私が経験したことからはあまりわかりませんが、さまざまなメソッドを試し、クラスパスを宣言するまでに約20回エラーが発生しました。同じエラー。ヴィシュラントはそれを述べることにおいて正しかった。現在のディレクトリを表します。

Javaオプションに関する詳細が必要な場合は、Java -?またはJava -helpと入力してください。オプションはオプションではないと思います。

CLASSPATHに関する詳細なWebサイトを見つけて、さらに調査を行ったところです。 CLASSPATHは環境変数として設定する必要があります。現在のディレクトリ<。>に。 Windowsのコマンドラインから設定できます。

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

新しい環境設定を追加する場合、変数を有効にする前に再起動する必要があります。ただし、コマンドプロンプトから設定できます。最初に述べたように設定することもできます。詳細および異なるOSを使用している場合は、 環境変数 を確認してください。

3
outlooker

Javaクラスを実行しているときに。class拡張を削除するのを忘れると、まったく同じエラーが発生しました。したがって、これの代わりに:

Java myClass.class

これを行う必要があります:

Java myClass
2
Darush

Win10でJavaを実行すると、同様の問題が発生しました

の代わりに

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

走る

$ Java hello
Hello, World
2
pev.hall

Java -d . HelloWorldコマンドを使用して、Javaプログラムを実行します。

このコマンドは、パッケージを宣言したときに機能します。

.は現在のディレクトリ/を表します。

2
Vishrant

同じ問題に直面しました。次の手順に従って解決しました

  • パッケージ 'org.tij.exercises'を含むディレクトリに移動します(例:Eclipseでは、srcフォルダーの場合があります)
  • Java org.tij.exercises.HelloWorldを使用します
0
Maria

同様の問題に直面していましたが、Javaクラスを保持していたファイルディレクトリのスペース文字が原因でした。

ソリューションとともに以下に示すシナリオ:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • Sample.Javaクラスは、Dir "D:\ Java Programs\Sample.Java" [注:Javaクラスに存在しないパッケージステートメント]に保持されていました。
  • コマンドプロンプトで、ディレクトリを「D:\ Java Programs \」に変更し、プログラムをコンパイルしましたが、「メインクラスを見つけられないかロードできませんでした」というエラーで実行できませんでした
  • SOF(何も機能しませんでした)に対するすべての可能な解決策の後、私はこの問題を引き起こす可能性のあるスペースに気付きました。
  • フォルダー名スペースchar ['Java Programs'-> 'JavaPrograms']を驚くほど削除すると、プログラムが正常に実行されました。

    それが役に立てば幸い
0
user3181500

IntelliJを使用して.jarを作成しました。これには、ライブラリから解凍されたjarが含まれています。これらの他のjarファイルの1つには、マニフェストに署名されたものがあり、.jarのロードを妨げていました。警告も何もありませんでした。 Could not find or load main class

マニフェストが含まれている解凍されたjarを削除すると、修正されました。

0
Sam Barnum

多くの人にとって、少なくとも私にとっては、クラスパス階層は直観的ではないと思います。ディレクトリ構造内で作業しているからです。

Javaは、ファイルパスだけでなく、パッケージパスに基づいてクラスの名前を見ています。

ローカルディレクトリ./packagefoo/MainClassにあるか、。/ packagefoo /にあるディレクトリにあるか、。/ packagefoo/MainClass/fooにあるディレクトリにあるかは関係ありません。

コマンド「Java packagefoo.MainClass」は、ルート%CLASSPATH%で実行されています。これは、Javaにとって重要なことを意味します。その後、そこからパッケージ名をトラバースします。一般的なコーダーが期待するようなパス名ではありません。

したがって、CLASSPATHが%CWD%/に設定されている場合、「Java packagefoo.MainClass」は機能します。 CLASSPATHを%CWD%/ packagefoo /に設定すると、packagefoo.MainClassが見つかりません。常に「Java MainClass」は、「package」のメンバーである場合は、Javaコード「package packagefoo;」を取り出すまで、何も意味しません。クラスファイルをディレクトリの上に移動します。

実際、「package packagefoo;」を変更すると「パッケージfoopackage;」へCLASSPATH/foopackageの下にサブフォルダーを作成するか、foopackage.MainClassが再び動作しなくなります。

さらに悪いことに、PATH、CLASSPATH、JAVAHOME、Windows、JDeveloper、Oracle Database、およびそれがインストールされたすべてのユーザー名の間で、何かを高速化しようとするコーダーは、パス変数と構造を強引に何かまで強制することになります意味を理解せずに機能します。

少なくとも私はやった。

0
phydroxide

Org/tij/exercisesフォルダーを作成し、HelloWorld.Javaファイルを移動します。次に、以下のコマンドを実行します

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

および

Java -cp . org/tij/exercises/HelloWorld
0
Ashwin Shetty

私は同じ問題に直面し、ここで言及したすべてを試しました。問題は、クラスの作成後にEclipseでプロジェクトを更新しなかったことです。そして、リフレッシュすると、期待通りに動作しました。

0
decoder