.jar error - не удалось найти или загрузить основной класс
Я попытался поместить HelloWorld в файл .jar и запустить его, но он не работает. Я создал файл java и набрал программу, а затем написал в cmd:
javac HelloWorld.java
java HelloWorld
и это сработало. Затем я ввел
echo Main-Class: HelloWorld >manifest.txt
jar cvfm HelloWorld.jar manifest.txt HelloWorld.class
и получил выход
added manifest
adding: HelloWorld.class(in = 426) (out= 288)(deflated 32%)
Затем я ввел
java -jar HelloWorld.jar
HelloWorld.jar
и первая строка работала, а вторая строка дала мне ошибку:
Error: Could not find or load main class path\HelloWorld.jar
который является тем же результатом, который я получил (в быстро закрывающемся окне), когда я попытался открыть его с файлом java.exe в 64-разрядном файле jre7\bin, jdk1.7.0_51\bin, jdk1.7.0_51\jre\bin, а также 32 бит jre7\bin. Я удалил и переустановил оба моих jre и jdk и воссоздал файлы .class и .jar, но проблема не устранена. Я нахожусь на win8.
Редактировать: Я пытался сделать то, что предложил Эферия, но не повезло. Я поместил HelloWorld.java в путь \com\stackoverflow\user\blrp, скомпилировал его, и он работал, введя
java com.stackoverflow.user.blrp.HelloWorld
в пути. Затем я создал манифест и jar:
(echo Manifest-Version: 1.0
echo Class-Path: .
echo Main-Class: com.stackoverflow.user.blrp.HelloWorld) >manifest.txt
jar cvfm HelloWorld.jar manifest.txt com\stackoverflow\user\blrp\HelloWorld.class
и получил выход
added manifest
adding: com/stackoverflow/user/blrp/HelloWorld.class(in = 454) (out= 312)(deflat
ed 31%)
но все же, java -jar HelloWorld.jar работал, и HelloWorld.jar не сделал (такая же ошибка). Я также старался не делать вещи пакета, просто манифест класса-класса, тот же результат.
(Кроме того, я решил проблему до того, как задал вопрос, используя файл .bat, но все равно было бы приятно, если бы эта работа работала.)
Ответы
Ответ 1
Спасибо jbaliuka за предложение. Я открыл редактор реестра (набрав regedit в cmd) и перейдя в HKEY_CLASSES_ROOT > jarfile > shell > open > , затем откройте (по умолчанию) и изменив значение из
"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
to
"C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*
(Я просто удалил w в javaw.exe.) После этого вы должны щелкнуть правой кнопкой мыши jar → open с → выбрать программу по умолчанию → перейти к вашей папке java и открыть \jre7\bin\java.exe(или любой другой файл java.exe в вашей папке java). Если это не сработает, попробуйте переключиться на javaw.exe, откройте файл jar с ним, затем откройте его.
Я ничего не знаю о редактировании реестра, за исключением того, что это опасно, поэтому вы можете его создать, прежде чем делать это (в верхней строке, "Файл" > "Экспорт" ).
Ответ 2
Вы всегда можете запустить это:
java -cp HelloWorld.jar HelloWorld
-cp HelloWorld.jar
добавляет банку путь к классу, тогда HelloWorld
запускает класс, который вы написали.
Чтобы создать runnable jar с основным классом без пакета, добавьте Class-Path: .
в манифест:
Manifest-Version: 1.0
Class-Path: .
Main-Class: HelloWorld
Я бы посоветовал использовать package
, чтобы дать вашему классу собственное пространство имен. Например.
package com.stackoverflow.user.blrp;
public class HelloWorld {
...
}
Ответ 3
Я нашел этот вопрос, когда искал ответ на вышеупомянутый вопрос. Но в моем случае проблема заключалась в использовании "en dash", а не "тире". Проверьте, какой тире вы используете, это может быть неверно. Я надеюсь, что этот ответ ускорит поиск кого-то другого, такой комментарий мог бы сэкономить мне немного времени.
Ответ 4
Если бы эта проблема не смогла найти ответ, поэтому я просмотрел другие темы, я обнаружил, что я делаю свое приложение с 1,8, но по какой-то причине мой jre был устаревшим, хотя я помню его обновление. Я загрузил lastes jre 8, и файл jar работает отлично. Надеюсь, это поможет.
Ответ 5
I Столкнулась с той же проблемой при установке установки с использованием файла jar. Решение thta для меня было
- открыть командную строку как администратор
- Перейдите в каталог jdk bin (Ex.C:\Program Files\Java\jdk1.8.0_73\bin)
- выполните
java -jar <<jar fully qualified path>>
Это сработало для меня:)