シンプルな「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!!");
}
}
Mainクラスがパッケージ内にある場合、次のように実行する必要があります。
Java <packageName>.<MainClassName>
あなたの場合、次のようにプログラムを実行する必要があります。
Java org.tij.exercises.HelloWorld
あなたのCLASSPATH
値は何ですか?
次のようになります。
.;%Java_HOME%\lib\dt.jar;%Java_HOME%\lib\tools.jar
あなたの値にはこの.;
が含まれていないと思います。
したがって、ADD 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
あなたが欲しいものを手に入れるかもしれません。
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
こんにちは世界!!
コマンドプロンプトから実行しているため、 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
変数を出力することにより、クラスパスを確認できます。
echo $CLASSPATH
echo %CLASSPATH%
:
で区切られたエントリがあります。
このエラーの理由の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
私は同じ問題を抱えていました。パッケージ名はありませんでしたが、私は少し違っていました。私の問題は、例えばクラスパスでした:
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を使用している場合は、 環境変数 を確認してください。
Javaクラスを実行しているときに。class拡張を削除するのを忘れると、まったく同じエラーが発生しました。したがって、これの代わりに:
Java myClass.class
これを行う必要があります:
Java myClass
Win10でJavaを実行すると、同様の問題が発生しました
の代わりに
$ Java ./hello
Error: Could not find or load main class ..hello
走る
$ Java hello
Hello, World
Java -d . HelloWorld
コマンドを使用して、Javaプログラムを実行します。
このコマンドは、パッケージを宣言したときに機能します。
.
は現在のディレクトリ/を表します。
同じ問題に直面しました。次の手順に従って解決しました
Java org.tij.exercises.HelloWorld
を使用します同様の問題に直面していましたが、Javaクラスを保持していたファイルディレクトリのスペース文字が原因でした。
ソリューションとともに以下に示すシナリオ:
public class Sample{
public static void main(String[] args) {
System.out.println("Hello world, Java");
}
}
IntelliJを使用して.jarを作成しました。これには、ライブラリから解凍されたjarが含まれています。これらの他のjarファイルの1つには、マニフェストに署名されたものがあり、.jarのロードを妨げていました。警告も何もありませんでした。 Could not find or load main class
マニフェストが含まれている解凍されたjarを削除すると、修正されました。
多くの人にとって、少なくとも私にとっては、クラスパス階層は直観的ではないと思います。ディレクトリ構造内で作業しているからです。
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、およびそれがインストールされたすべてのユーザー名の間で、何かを高速化しようとするコーダーは、パス変数と構造を強引に何かまで強制することになります意味を理解せずに機能します。
少なくとも私はやった。
Org/tij/exercisesフォルダーを作成し、HelloWorld.Javaファイルを移動します。次に、以下のコマンドを実行します
javac -cp . org/tij/exercises/HelloWorld.Java
および
Java -cp . org/tij/exercises/HelloWorld
私は同じ問題に直面し、ここで言及したすべてを試しました。問題は、クラスの作成後にEclipseでプロジェクトを更新しなかったことです。そして、リフレッシュすると、期待通りに動作しました。