web-dev-qa-db-ja.com

.jarファイルをダブルクリックすると「メインクラスが見つかりませんでした」

まず、この問題は非常に単純なものであり、多くの人がこの問題を経験しているように思えます。しかし、私の問題はわずか既存の投稿とは異なるようです。

NetBeansを使用してJavaアプリケーションをコンパイルします。ビルドが完了すると、出力はdist \フォルダーに正しく入ります。そこにjarファイルがあります。コマンドラインに移動すると、そのフォルダーに移動し、次を呼び出します。

Java -jar Prosperity.jar

すべてが正常に動作します。アプリケーションの名前は明らかにProsperityです。次のコマンドも正常に機能します。

javaw -jar Prosperity.jar

ただし、.jarファイルをダブルクリックすると、「メインクラスが見つかりませんでした:」というメッセージが表示され、次に.jarファイルへのパスが表示されます。 META-INFフォルダーが.jarファイル内に存在し、その中に正しいメインクラス名を持つMANIFEST.MFが存在することを100回確認しました。メインクラス(App.class).classファイルが.jarファイル内に存在することも確認しました。

質問は次のとおりです。ファイルをダブルクリックして、javawを実行することの違いは何ですか?実行するだけではないのは本当にイライラします!

あなたが私に与えることができる任意の方向に感謝します、私はここで私の髪を引き裂いています!

29
aardvarkk

おそらく、ファイルの関連付けが台無しになったのでしょう。コマンドプロンプトで、実行してみてください

ftype | find "jarfile"

64ビットWindows 7コンピューターでは、

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

ftypeで変更することもできます:

ftype jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
25
Jordan Miner

この投稿を見つけました...

Cmdの起動時ではなくjarファイルをダブルクリックしたときにのみ問題が発生する場合は、おそらくJREのバージョンが間違っているためです(7の代わりに6)。

でregeditの値を変更するだけです:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jarfile\Shell\open\command] "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

に:

_"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*_

この値が更新されても問題はないはずです。


注:Windowsでの32ビットバージョンと64ビットバージョンの切り替え:

-> _"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*_はJREの64ビットバージョンを使用します-> "C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %*はJREの32ビットバージョンを使用します

11
tatactic

あなたのregeditを検索し、フォローアイテムを確認してください

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\javaw.exe\Shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""


[HKEY_CLASSES_ROOT\jarfile\Shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""


[HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\Shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""
1
byby

私もこのエラーに遭遇しました。コマンドプロンプトを使用してファイルの関連付けを確認しましたが、すべて正しいです。 Java -jar MyProgram.jarを使用してコマンドラインから.jarを実行しようとして初めて、実際に問題の原因がわかりました。

.jarはJDK 7でコンパイルされましたが、私はJRE 6のみを実行していました。

Exception in thread "main" Java.lang.UnsupportedClassVersionError: MyProgram/Program : Unsupported major.minor version 51.0
        at Java.lang.ClassLoader.defineClass1(Native Method)
        at Java.lang.ClassLoader.defineClassCond(Unknown Source)
        at Java.lang.ClassLoader.defineClass(Unknown Source)
        at Java.security.SecureClassLoader.defineClass(Unknown Source)
        at Java.net.URLClassLoader.defineClass(Unknown Source)
        at Java.net.URLClassLoader.access$000(Unknown Source)
        at Java.net.URLClassLoader$1.run(Unknown Source)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(Unknown Source)
        at Java.lang.ClassLoader.loadClass(Unknown Source)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at Java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: MyProgram.Program. Program will ex
it.
1
Adam

私はまったく同じ問題を抱えていて、同じ方法で修正しました。ユーザーのカスタマイズだけでなく、関連付けを完全に削除し、JREを再インストールする必要がありました。

修正前の関連付けはまだ:

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

そして(同じ)後:

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
0
James

上記の方法で問題を解決できない場合は、PCから.jarファイルタイプを削除してみて(Unassoc.exeというソフトウェアをグーグルで削除してファイルタイプを削除できます)、問題は修正されます! (少なくとも、これは私の場合です!)

0
tomato