Windowsエラー
 Computer >> コンピューター >  >> トラブルシューティング >> Windowsエラー

【Java】「メインクラスが見つからないか、ロードできませんでした」エラーの原因と解決方法

コマンドプロンプトでjavaコマンドを使用し、ターミナルでクラス名を指定してJavaプログラムを起動しようとすると、「Could not find or load main class(メインクラスが見つからないか、ロードできませんでした)」というエラーが発生することがあります。このエラーの主な原因は、ユーザーがクラスを宣言する際に犯すプログラミング上のミスです。

【Java】「メインクラスが見つからないか、ロードできませんでした」エラーの原因と解決方法

前述のとおり、このエラーはシステム自体の問題ではなく、主にユーザー側のミスによって引き起こされます。本記事では、典型的なミスのシナリオとその対処法を順番に解説していきます。なお、読者の皆様がJavaプログラミングの基礎知識とその仕組みを理解していることを前提としています。

Javaで「メインクラスが見つからないか、ロードできませんでした」というエラーが発生する原因

このメッセージは、Javaエンジンが実行対象のクラスを取得する最初のステップに失敗したことを意味します。つまり、javaコマンドが正しいディレクトリでクラスを見つけられなかったのです。

場合によっては、正しいファイルパスを追加し、Javaにクラスの所在を明示的に伝える必要があります。コマンドラインターミナルからコマンドを実行している場合、コンピュータはクラスがどこにあるのかを自動的には認識しません。一方、IDEでは現在の作業ディレクトリへのポインタが保持されているため、このような問題は発生しません。

「java <class-name>」の構文とは?

トラブルシューティングに入る前に、まずコマンドの正しい構文を確認しておきましょう。構文が間違っていると、必然的にこのエラーに直面することになります。

javaコマンドの一般的な構文は次のとおりです:

 java [ <option> ... ] <class-name> [<argument> ...]

ここで、<option>はコマンドラインオプション、<class-name>は完全修飾Javaクラス名(FQN)、<argument>はコンパイル済みアプリケーションに渡されるコマンドライン引数です。

有効なコマンドの例:

java -Xmx100m com.acme.example.ListAppuals kevin arrows bart

上記のコマンドを実行すると、javaコマンドは以下の操作を行います:

  • コンパイル済みのクラス「com.acme.example.ListAppuals」を検索します。
  • 見つかったクラスをロードします。
  • クラスのロード後、有効なシグネチャ・修飾子・戻り値の型を持つ「main」メソッドが存在するかを確認します。mainメソッドの標準的な定義は以下のとおりです:
public static void main(String[])
  • mainメソッドが、引数「kevin」「arrows」「bart」をString[]として受け取って呼び出されます。

「メインクラスが見つからないか、ロードできませんでした」エラーの修正方法

解決策1:クラス名引数の確認

ユーザーが最もよく犯すミスは、間違ったクラス名を引数として指定すること、または正しいクラス名を誤った形式で指定することです。コマンドラインで直接パラメータを入力するため、クラス名の形式を誤りやすい点に注意が必要です。以下に、よくあるミスのパターンをまとめます。

  • 単純なクラス名だけを記述している:「com.acme.example」のようなパッケージ内にクラスを配置している場合は、パッケージ名を含む完全なクラス名を指定する必要があります。

正しい書き方:

java com.acme.example.ListAppuals

誤った書き方:

java ListAppuals
  • ファイル名やパス名を指定している:Javaはパス名やファイル名からはクラスを取得しません。必ずクラス名を宣言してください。誤った入力例は以下のとおりです:
java ListAppuals.class

java com/acme/example/ListAppuals.class
  • 大文字・小文字の区別を無視している:Javaコマンドは大文字小文字を厳密に区別します。1文字でも間違えるとメインクラスをロードできません。誤った例:
java com.acme.example.listappuals
  • ソースファイル名を指定している:前述のとおり、指定すべきは完全修飾クラス名のみです。拡張子付きのソースファイル名は不要です。誤りの例:
java ListAppuals.java
  • タイピングミスクラス名の記述忘れがある場合も、同様にこのエラーが発生します。

クラス名の宣言に不備がある場合は、修正してからプログラムの起動を再試行してください。

解決策2:クラスパスの確認

クラス名を正しく宣言してもエラーが解消しない場合は、javaコマンドが指定されたパスでクラスを見つけられていない可能性があります。クラスパスとは、Javaランタイムがリソースやクラスファイルを検索する際に参照するパスのことです。以下の2つの方法でクラスパスを設定できます:

C:> sdkTool -classpath classpath1;classpath2...

C:> set CLASSPATH=classpath1;classpath2...

クラスパスについてさらに詳しく知りたい方は、以下の公式ドキュメントを参照してください。

・Javaコマンドのドキュメント
・クラスパスの設定方法

解決策3:ディレクトリ構成の確認

ディレクトリをクラスパスとして指定した場合、そのディレクトリは常に名前空間のルートに対応します。たとえば「/usr/local/acme/classes」がクラスパスに含まれている場合、Javaはクラス「com.acme.example.Appuals」を以下のパスで検索します:

/usr/local/acme/classes/com/acme/example/Appuals.class

つまり、以下のようにパッケージ階層までをクラスパスに指定してしまうと、Javaはクラスを見つけられません:

/usr/local/acme/classes/com/acme/example

あわせて、サブディレクトリ構成がFQN(完全修飾クラス名)と一致しているかも確認してください。クラスのFQNが「com.acme.example.Appuals」であれば、Javaは「com/acme/example」ディレクトリ内の「Appuals.class」を探します。

具体的な例として、以下のシナリオを想定してみましょう:

  • 実行したいクラス:com.acme.example.Appuals
  • 完全なファイルパス:/usr/local/acme/classes/com/acme/example/Appuals.class
  • 現在の作業ディレクトリ:/usr/local/acme/classes/com/acme/example/

この場合、各コマンドの成否は以下のようになります:

# 誤り:FQN(完全修飾クラス名)が必要

java Appuals

# 誤り:現在の作業ディレクトリに`com/acme/example`フォルダが存在しない

java com.acme.example.Appuals

# 誤り:上記と同じ理由による失敗

java -classpath . com.acme.example.Appuals

# 正しい:相対パスによるクラスパス指定

java -classpath ../../.. com.acme.example.Appuals

# 正しい:絶対パスによるクラスパス指定

java -classpath /usr/local/acme/classes com.acme.example.Appuals

注意:クラスパスには、アプリケーションが必要とするその他のクラス(システムクラス以外)もすべて含める必要があります。

解決策4:パッケージ宣言の確認

上記のすべての解決策を試しても問題が解決しない場合は、ソースコードが正しいフォルダに配置されているか、そしてpackage宣言が正しく記述されているかを確認してください。IDEでコードを実行していれば、通常はこの種の問題を警告してくれます。しかし、コマンドプロンプトから実行している場合、こうしたミスは検出されず、結果として本記事で取り上げているクラスエラーが表示されることになります。

  1. Windows 10でDS4Windowsが開かない問題を解決する方法

    DS4Windowsは、PlayStationのコントローラー(DualShock 3、DualShock 4、DualSense)をPCに接続して使用できるようにする、無料のポータブルプログラム兼仮想エミュレーターです。このツールを使えば、PlayStationコントローラーで遊べるPCゲームが大幅に増え、さらにキーやボタンのリマップ(割り当て変更)も自由に行えます。PCゲーマーにとって非常に便利なツールですが、まれに「プログラムが開けない」というトラブルが発生することがあります。 本記事では、DS4Windowsが開かない原因と、その解決方法をわかりやすく解説します。同じ問題でお困りの方

  2. 【Windows 10】「入力された環境オプションが見つかりません」エラーの解決方法

    「入力された環境オプションが見つかりません」というエラーは、Windows 10ユーザーがときどき遭遇するシステムエラーです。この問題は、WindowsアップデートやWindowsファイルの破損によって引き起こされます。Windows 10の詳細なシステム設定が適切に行われていない場合、環境変数に予期しない変更が生じ、コンピューターにさまざまなトラブルを引き起こす可能性があります。 本記事では、環境変数の正しい設定方法と、このエラーが発生する主な原因について詳しく解説します。 Windows 10で「入力された環境オプションが見つかりません」エラーを修正する方法 このエラーにはさまざまな原因