Основной класс не найден, IntelliJ создает банку

У меня возникают проблемы при попытке запустить файл jar, созданный в IntelliJ.
Я выполнил шаги, описанные здесь: Как правильно создавать jar-файлы из IntelliJ? и долго искал других людей с такой же проблемой, используя IntelliJ, и не нашел решения.
В меню Структура проекта > Раздел «Артефакты» У меня есть пакет и имя основного класса, и я также попытался указать бит «Путь к классу», используя относительный и абсолютный путь как к исходному файлу, так и к файлу .class (который кажется скрытым в дереве отображения проекта IntelliJ ..), но даже со всем этим (я также обязательно пересобираю банку каждый раз, когда что-то меняю) я получаю «Не удается найти основной класс. Программа завершит работу». сообщение, когда я пытаюсь запустить банку.

В основной папке проекта есть src и out.
out содержит «производство» с деревом пакетов и файлы классов
out также содержит «артефакты» с папкой jar, а исполняемый файл jar
src содержит папка с изображениями, META-INF и дерево пакетов.
первая папка в пакете содержит основной класс, поэтому src/ravelDemo/RavelDemoMain.java

в «Настройки проекта»> «Артефакты» основной класс указан как ravelDemo.RavelDemoMain
в настоящее время путь к классу — out\production\RavelSequence v1.03\ravelDemo\, но этот и любой другой путь к классу, который я указал (или оставил пустым ) кажется, не указывает на нужное место. (RavelSequence v1.03 — это название проекта).

Что я делаю неправильно?


person sideways8    schedule 23.06.2012    source источник
comment
Посмотрите эти скринкасты: screenr.com/Eyg8, screenr.com/FWM8. Если вы можете воспроизвести проблему с аналогичными шагами, прикрепите к вопросу пример проекта.   -  person CrazyCoder    schedule 23.06.2012
comment
Спасибо за ответ! Это действительно удобный сайт. Вот что у меня есть: screenr.com/EMl8   -  person sideways8    schedule 24.06.2012
comment
А вот пример проекта, созданного с нуля с той же проблемой, созданного по образцу вашего примера: screenr.com/6Ml8   -  person sideways8    schedule 24.06.2012
comment
Можете ли вы заархивировать и поделиться проектом? Что такое JDK по умолчанию в вашей системе? Можете ли вы попробовать запустить его из командной строки, используя java.exe из того же каталога, что и проект JDK? java.exe -jar Sample.jar   -  person CrazyCoder    schedule 24.06.2012
comment
У меня jdk 1.7.0_03. Я могу запустить их из командной строки, используя эти команды. Я получаю кучу ошибок для fileIO и imageIO, но, возможно, я неправильно включил их в банку. Вот проект: dl.dropbox.com/u/4843072/RavelSequence %20v1.03.zip Я хотел бы иметь исполняемый файл с двойным щелчком, а не исполняемый файл командной строки, чтобы я мог легко поделиться проектом. Это возможно?   -  person sideways8    schedule 24.06.2012


Ответы (2)


Основываясь на обсуждении комментариев выше, кажется, что IntelliJ IDEA создает действительный исполняемый jar-файл с основным классом, правильно указанным в манифесте, этот jar-файл отлично работает при выполнении с помощью команды java -jar ... из командной строки с использованием целевой версии JDK проекта на машина пользователя.

Проблема в том, что он не работает при двойном щелчке в системе @sideways8. Это может быть вызвано поврежденной установкой Java по умолчанию или неправильной .jar ассоциацией типов файлов в реестре Windows. Это проблема конкретной машины, так как у меня нет проблем с запуском общего JAR-файла проекта в моей системе двойным щелчком по нему.

Чтобы решить эту проблему, вы можете попробовать удалить все версии Java, присутствующие на этом компьютере, из каталога Control Panel | Programs and Features, затем установите новый JDK с нуля, чтобы он был единственным JDK в системе и .jar тип файла обрабатывался им.

Я использую Total Commander, в котором есть удобная функция проверки/редактирования ассоциаций файлов (File | Associate With...), вот как .jar ассоциация отображается, когда я нажимаю Edit type...:

тип файла jar

person CrazyCoder    schedule 24.06.2012
comment
Хорошо, я загружаю свежий jdk. Если я попытаюсь поделиться этой банкой с другими людьми, столкнется ли, по вашему опыту, с той же проблемой? Есть ли способ упаковать соответствующий jdk с банкой, чтобы не беспокоиться о родной среде системы? - person sideways8; 24.06.2012
comment
Это очень редкая проблема, большинство пользователей с установленной Java смогут запустить ваше приложение. Обратите внимание, что вы можете настроить таргетинг на версию JDK 1.6, так как она, вероятно, по-прежнему используется по умолчанию на многих машинах. Если вы строите с помощью JDK 1.7, пользователи с установленным JDK 1.6 не смогут запускать ваше приложение. Вы можете исправить это, изменив целевой JDK на 1.6 или добавив параметры -source 1.6 -target 1.6 в Settings | Compiler | Java Compiler, Дополнительные параметры командной строки. - person CrazyCoder; 24.06.2012
comment
Если вы хотите быть на 100% уверены, что ваше приложение работает на целевом компьютере, объедините с ним JRE или оберните его в установщик, который проверит, что на компьютере есть рабочий JDK/JRE минимальной версии, необходимой для запуска вашего приложения и загрузки/установки. это автоматически, если система не соответствует вашим требованиям. - person CrazyCoder; 24.06.2012
comment
Хорошо, теперь у меня это работает, используя jdk1.7. Все еще загружаю версию 1.6, чтобы я мог покрыть эти основы. Спасибо! - person sideways8; 24.06.2012
comment
Когда я пытаюсь запустить свои проекты на 1.6, я получаю «Исключение в потоке main java.lang.UnsupportedClassVersionError: ravelDemo/RavelDemoMain: Unsupported major.minor version 51.0». Вся поддержка jetbrains, которую я читал по этому вопросу, касалась использования jdk 1.4. или 1.5, и решением было установить 1.6. Я отредактировал Project SDK и зависимости модуля для jdk 6, когда это не сработало, я также добавил дополнительные параметры командной строки, о которых вы упомянули, но все равно получаю ошибку неподдерживаемого класса. - person sideways8; 24.06.2012
comment
Перестройте проект и артефакт. - person CrazyCoder; 24.06.2012
comment
Удалите все выходные классы, перестройте проект с помощью -target 1.6 или JDK 1.6, настроенных в зависимостях проекта/модуля, после чего он должен работать нормально. - person CrazyCoder; 25.06.2012
comment
Они и сейчас ходят нормально. Однако мне пришлось изменить код, чтобы заставить его работать. По-видимому, 1.6 не поддерживает дженерики в JComboBox. Все это работает нормально (банки тоже) на моей машине, но изображения не загружаются, когда я отправил их другу, чтобы попробовать. Они загружаются нормально на моей машине. - person sideways8; 25.06.2012

У меня такая же проблема. Либо файл jar был создан с помощью IntelliJ IDEA, либо другой IDE. В моем случае я обнаружил проблему в том, что на моем компьютере были установлены две версии java (java 6 и java 8). Это проблема неправильной настройки системы. поэтому удалите любую версию Java, которая у вас есть, и установите ее снова, и проблема будет решена.

person Community    schedule 09.11.2016