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

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

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

java -jar Процветание.jar

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

javaw -jar Prosperity.jar

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

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

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

6 ответов

Решение

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

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

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

Если у вас проблема только при двойном щелчке по файлу 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" %*

к:

"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

Найдите ваш 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\""

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

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

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