"Не удалось найти основной класс" при двойном щелчке .jar файла

Во-первых: Я понимаю, что этот вопрос должен быть довольно простым, и многие люди, похоже, испытали это. Однако, похоже, моя проблема может немного отличаться от существующих сообщений.

Я использую NetBeans для компиляции приложения Java. Когда это будет сделано, вывод будет правильно отправлен в папку dist \. Там присутствует файл jar. Если я перейду в командную строку, перейдите к этой папке и вызовите следующее:

java -jar Prosperity.jar

все работает нормально. Очевидно, что имя приложения - Prosperity. Следующая команда также отлично работает:

javaw -jar Prosperity.jar

Однако, дважды щелкнув файл .jar, вы получите сообщение: "Не удалось найти основной класс:", а затем укажите путь к файлу .jar. Я проверял сто раз, что папка META-INF существует внутри файла .jar, и внутри нее существует MANIFEST.MF с правильным именем основного класса. Я также проверил, что файл основного класса (App.class).class существует внутри файла .jar.

Итак, вопрос в том, какая разница между двойным щелчком на файле и запуском javaw на нем? Это действительно разочаровывает, что он не просто побежит!

Спасибо за любое направление, которое вы можете мне дать, я слежу за моими волосами!

Ответ 1

Возможно, ваши файловые ассоциации перепутались. В командной строке попробуйте запустить

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" %*

Ответ 2

Только что нашел этот пост...

Если у вас есть проблема только при двойном щелчке по файлу jar, а не при запуске cmd, это, вероятно, потому, что версия JRE ошибочна (6 вместо 7).

Просто измените значение в regedit на:

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

to:

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

Не должно возникать проблемы при обновлении этого значения.


Примечание. Переключение между версиями 32 и 64 бит в Windows:

- > "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* будет использовать 64-разрядную версию JRE - > "C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %* будет использовать 32-битную версию JRE

Ответ 3

выполните поиск в вашем 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\""

Ответ 4

Я столкнулся с этой ошибкой. Я проверил ассоциацию файлов с помощью командной строки, и все было правильно. Только после того, как я попытался запустить .jar из командной строки, используя java -jar MyProgram.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.

Ответ 5

У меня была точно такая же проблема, исправлена ​​так же. Мне пришлось полностью удалить ассоциацию, а не только пользовательскую настройку, и переустановить 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" %*

Ответ 6

Если описанные выше методы не могут решить проблему, попробуйте удалить тип файла .jar с вашего компьютера (вы можете использовать программное обеспечение Google под названием Unassoc.exe и удалить тип файла), а затем проблема исправлена! (По крайней мере, это мой случай!)