1. ホーム
  2. java

[解決済み] NetBeans で作成した jar ファイルが動作しない

2022-02-12 01:06:21

質問

そこで、NetBeansでswing GUIのプログラムを作り、buildをクリックしてjarファイルを作りました(非常にシンプル)。それをダブルクリックして実行すると、mainクラスが見つからないと言われます。しかし、コマンドプロンプトから実行すると、完全に動作します。この奇妙な動作について、何か簡単に判断できる理由があれば教えてください(もしソースコードが必要であれば、ここに掲載します)。

解決方法は?

NetBeansで必要だと思われるものは。

  • プロジェクトは、メインプロジェクトでなければなりません(プロジェクトリストで右クリック)。
  • プロジェクトのプロパティで、Main Classを設定する必要があります。 (右クリック→プロパティ→実行→メインクラス。)

そして、プロジェクトを右クリックして、quot;Clean and Build"を実行すると、jarは、quot;Clean and Build"の中にビルドされます。 dist サブディレクトリに格納されます。

これで直らなかった場合は、もっと長い話になりますが......。

jarファイルをダブルクリックして実行すると、OSはコマンドラインからこれを入力したかのように動作します。

java -jar filename.jar

(コマンドラインからだとうまくいくというのは、このように入力しているのでしょうか?)

このとき、Javaの実行ファイルはjarの中にある次のような名前のファイルを探します。 META-INF/MANIFEST.MF . そして、そのファイルの内容から、あるプロパティの値を探します。 Main-Class . そして最後に、あなたのjarからその名前のクラスを探し、その静的な main(String[]) メソッドを使用します。

そのため、jarの実行に失敗した場合は、以下のようにして何が起こっているのかをデバッグすることができます。

  • NetBeansでプロジェクトをクリーンアップして再構築します。
  • クラスが実際にjarに含まれているかどうか、ダブルチェックします。
    • コマンドプロンプトを起動する
    • cd を入力します。 dist サブディレクトリを作成します。
    • のようなコマンドを使用します。 jar tf filename.jar をクリックすると、中身が一覧表示されます。
  • をダブルチェックしてください。 MANIFEST.MF ファイルが正しいことを確認します。
    • もう一度コマンドプロンプトで
    • cd を入力します。 dist ディレクトリを作成します。
    • のようなコマンドを使用します。 jar xf filename.jar META-INF/MANIFEST.MF を使用して、マニフェストを抽出します。
    • そのファイルの中身を見る(例えば type META-INF\MANIFEST.MF を確認します。 Main-Class には、適切なクラスが設定されています。

上記がすべてチェックアウトされたら、ファイルをダブルクリックします。 が必要です。 が動作します。