"Не удалось найти основной класс" при двойном щелчке .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 и удалить тип файла), а затем проблема исправлена! (По крайней мере, это мой случай!)