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