«Не удалось найти основной класс» при двойном щелчке по файлу .jar - PullRequest
29 голосов
/ 25 марта 2011

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

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

java -jar Prosperity.jar

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

javaw -jar Prosperity.jar

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

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

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

Ответы [ 6 ]

25 голосов
/ 25 марта 2011

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

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" %*
11 голосов
/ 04 марта 2012

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

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

1 голос
/ 18 ноября 2012

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

найдите ваш 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\""
0 голосов
/ 22 апреля 2012

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

0 голосов
/ 02 июня 2011

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