Java как сделать exe файл netbeans

Обновлено: 07.07.2024

Приветствую Тебя, мой дорогой друг. В прошлой статье мы устанавливали JDK , в этой же мы установим IDE Apache NetBeans для более комфортного кодинга. Про более функциональный топчик IntelliJ IDEA я не забыл, мы так же ее пощупаем, но решать задачки и набивать руку будем все же на Apache NetBeans .

Переносимся на страницу информации, нам советуют чтобы мы использовали версию Java(LTS) (про нее я упоминал в прошлой статье ), ищем кнопочку " Download " и жмякаем по ней.

Теперь нужно выбрать установщик в зависимости он нашей операционной системы, у меня Windows 10 64bit следовательно я выбираю " Apache-NetBeans-12.1-bin-windows-x64.exe " и опять же жмем по ссылке.

Ну и наконец-то заключительная страница, выбрать нужно место откуда будем качать наш дистрибутив, можно выбрать любую рабочую ссылку все равно результат будет один и тот же.

После того как файл установщик оказался у нас, жмякаем по нему и понеслась установка IDE.

И так, перед нами окно приветствие. Если нажать кнопочку " Customize. " произойдет вызов формочки выбора компонентов для установки, но мы оставим все по умолчанию и нажмем " Next> ".

Ставим галочку под тем что соглашаемся с условиями распространения ПО и жмем " Next ".

Можем задать место для установки, но оставим по умолчанию, жмем " Next ".

Почти все, осталось просто немного подождать.

Последнее что мы увидим - это форму говорящую об успешной инсталляции нашей IDE, жмякаем " Finish ".

С установкой справились, ну прям таки молодчики =). Осталось дело за малым, пощупать и испытать свежеустановленный инструмент разработки Apache NetBeans. Создадим тестовый проект и наберем код нашей прошлой программки.

Запускаем Apache NetBeans IDE . Перед нами окно программы разделенное на три зоны.

В верхней панели меню жмякаем по пункту " File ", в раскрывающемся списке выбираем " New Project. ".

Выбираем категорию " Java with Maven " и проект " Java Application ". Рекомендация, новички могут начать с выбранной категории и проекта. Maven - средство автоматизации сборки проектов, предназначен для сложных программ которые использую сторонние ресурсы, библиотеки. С ним мы разберемся далее в статьях, а на данный момент он нам не мешает, мы же пока набиваем руку.

В следующей форме укажем имя нашего проекта и место на диске где он будет располагаться. После чего кнопочка " Finish ".

И так, в области файлов и ресурсов появился наш проект.

В каталоге " Source Packages " размещаются каталоги, но в Java их называют " Package "- Пакеты , так вот, эти самые пакеты позволяют нам логически организовывать классы в наборы( к примеру пакет "File" в нем будут содержаться все классы по работе с файлами ), а еще пакеты позволяют избежать конфликта связанного с одинаковыми именами у классов.

Наша задача создать класс. Для этого напротив каталога " Source Packages "(находятся пакеты с нашими исходными кодами) жмем плюсик, чтобы посмотреть содержимое, видим пакет " myjavacode " в котором мы создадим класс с точкой входа в нашу программу. Правой кнопкой мыши жмем по " myjavacode " в раскрывающемся меню выбираем " New " затем " Java Class. ".

Даем классу имя аналогичное пакету, но каждая буква заглавная(про стиль именования классов, пакетов и тд. мы поговорим в другой статье).

Отлично, класс создан, видим его в менеджере проектов и редакторе. А вот теперь можно и что-нибудь написать.

У меня есть программа, которую я хочу, чтобы ее мог легко установить любой пользователь, и я подумал, что создание собственного установщика - это путь. Я использовал функциональные возможности Netbeans 8.0 (Свойства проекта> Включить собственную упаковку и Пакет как). Мне удалось создать работающий родной установщик. После установки у меня есть следующее дерево файлов:

Failed due to exception from main class

Чтобы определить источник проблемы, я использовал основные стандартные выходные данные и перенаправил их в файл благодаря командной строке Windows. Я получил выводы до первого звонка во внешнюю библиотеку. Похоже, что связывание библиотек не выполнено . Тем не менее, вот содержимое моего package.cfg файла:

Путь к классу указан, но, похоже, не распознан. Я попытался инвертировать косую черту (\) и изменить пробелы для , или ; безрезультатно.

Существует простой способ воспроизвести ошибку (Netbeans 8.0 и JDK 1.8u11):

  • Создать новый проект Java в Netbeans
  • Ссылка на любую внешнюю библиотеку (.jar): щелкните правой кнопкой мыши на Libraries> Добавить jar /folder
  • В методе main создайте экземпляр объекта, ссылающегося на эту библиотеку.
  • Нажмите правой кнопкой мыши на название проекта> Свойства> Развертывание> Активировать действия Native Packaging в меню проекта
  • Нажмите правой кнопкой мыши на своем проекте> Пакет как> Установщик EXE
  • После сборки перейдите в каталог, в котором был создан установщик, и запустите установщик.
  • В конце установки перейдите в каталог установки и запустите .exe. Ошибка должна появиться.

3 ответа

У меня только что была похожая проблема с приложением JavaFX в нативном пакете, где я получал ошибку «Ошибка из-за исключения из основного класса». Мой package.cfg выглядел так же, как ваш.

Что я сделал для диагностики, так это просто вручную запустил файл jar (например, Project.jar) из командной строки и посмотрел, что такое трассировка стека, например, если ваш главный класс был в org.project.Project

Оказывается для меня, что URL-адреса, которые я использовал для загрузки различных файлов (например, файлов FXML для JavaFX), упакованных в банку, вызывали проблемы - я использовал относительные URL-адреса (например, "./blah.ext" или " ../foo.txt "и т. д.), но как только я изменил URL-адреса на абсолютные, в зависимости от того, как файлы были размещены в банке, все работало нормально (например," /org/project/blah.ext "и" /org /foo.txt ").

Та же проблема здесь, используя их:

  • Java SE версии 8, обновление 31 (сборка 1.8.0_31-b13)
  • NetBeans 8.0.2 (исправление 1)
  • Windows 7 Enterprise SP1 на Intel Core i7 (64-разрядная версия)
  • Inno Setup Compiler 5.5.5 (u) - Юникод

Я также отслеживал вывод путем перенаправления printlns, и он взорвался при первом вызове внешней библиотеки. Я подумал, что у меня та же проблема, что и у matt1, поэтому я исправил все относительные пути, но без радости. Я наконец понял, что установщик не создает папку /app /lib с внешними файлами jar. После ручного копирования папки lib в целевую установочную папку она работала нормально, даже на компьютере без JRE (я работаю над автономным приложением).

Исправлено было добавление строки в build.xml:

Вторая директива fileset вызывает копию зависимостей jar из папки lib, в которой все исправлено при развертывании в виде EXE или MSI.

Я думаю, что ваш основной класс неправильно настроен на упаковку. Вместо использования Netbeans вы можете создать exe из вашего jar-файла, используя exe4J. (Пожалуйста, убедитесь, что основной класс установлен из project> properties> run> main class

Для создания и редактирования исходного кода Java вы можете использовать любой текстовый редактор или IDE. Этот раздел демонстрирует, как создавать, компилировать и запускать программы Java из командной строки. В разделе «Компиляция и запуск Java программ в NetBeans» показано, как это делать в IDE на примере NetBeans.

Можно вообще обойтись без IDE, а писать исходный код в любом текстовом редакторе (например, в Notepad), а компилировать в командной строке.


Внимание: файл с исходным кодом должен иметь расширение .java и иметь в точности такое же имя, как и имя публичного (public) класса. Например, файл с исходным кодом:

должен называться Welcome.java, поскольку имя public класса – Welcome.

Компилятор Java преобразовывает файл с исходным кодом Java в файл с байткодом Java. Следующая команда компилирует Welcome.java:

Если нет синтаксических ошибок, компилятор генерирует файл байкода с расширением .class. Следовательно, приведённая выше команда генерирует файл с названием Welcome.class.

Чтобы иметь возможность компилировать и запускать программы, вы должны установить JDK. Как это сделать описано в инструкциях:

Язык Java – это высокоуровневый язык программирования, но байткод Java – это низкоуровневый язык. Байткод похож на машинные инструкции, но нейтрален к архитектуре (не зависит от архитектуры) и может запускаться на любой платформе, которая имеет виртуальную машину Java – Java Virtual Machine (JVM). В отличие от физической машины, виртуальная машина – это программа, которая интерпретирует байткод Java. Это одно из главных преимуществ Java: байткод Java может работать на различных аппаратных платформах и операционных системах. Исходный код Java компилируется в байткод Java, а байткод Java интерпретируется виртуальной машиной Java. Ваш код Java может использовать код библиотеки Java. JVM выполняет ваш код вместе с кодом из библиотеки.

Выполнить Java программу – это значит запустить байткод программы. Вы можете выполнить байткод на любой платформе с JVM, которая является интерпретатором. Она (виртуальная машина Java) переводит отдельные инструкции байткода в целевой машинный языковой код. Это делается последовательно – одна инструкция за раз, а не вся программ за один присест. Каждый шаг немедленно выполняется, сразу после перевода.

Следующая команда выполняет байткод для программы, которая приведена выше:

На скриншоте ниже показан процесс компиляции и запуска:


Внимание: не используйте расширение .class в команде, когда запускаете программу. Используйте ИмяКласса для запуска программы. Если вы в командной строке используете ИмяКласса.class, то система будет пытаться работать с файлом ИмяКласса.class.class.

Справка: когда выполняется Java программа, JVM начинает с загрузки байткода класса в память, используя программу под названием загрузчик классов (class loader). Если ваша программа использует другие классы, загрузчик классов динамически подгружает их перед тем, как они понадобятся. После загрузки класса, JVM использует программу под названием контролёр байткода (bytecode verifier) для проверки правильности байткода и проверки, что байткод не нарушает ограничений безопасности Java. Java обеспечивает строгую защиту, чтобы убедиться, что файлы классов Java не подделаны и не вредят вашему компьютеру.

Педагогическое примечание: ваш инструктор может требовать от вас использовать пакеты для организации программ. Например, все программы из этой части можно поместить в пакет chapter2. Подробности о пакетах и пространствах имён будут рассмотрены далее. Также посмотрите раздел «Почему NetBeans всегда использует package».

Типичные ошибки компиляции и запуска Java программ

Команда javac не найдена

Если при запуске javac, т.е. при попытке компиляции Java программы вы получаете ошибку:

Это означает, что JDK не установлен. Либо установлен, но не настроены переменные окружения. Способы исправления очевидны:

  • установить JDK
  • настроить переменные окружения

Если JDK установлен, то можно обойтись без добавления переменной окружения. Для этого используйте абсолютный путь до исполнимого файла javac:

Ошибка Class names are only accepted if annotation processing is explicitly requested

Если попытаться скомпилировать программу следующим образом:

то возникнет ошибка:

Причина ошибки в том – что вы забыли указать расширение файла .java.

Ошибка записи (error while writing)

Компиляция заканчивается ошибкой:

Причина ошибки в том, что у компилятора (javac) недостаточно прав на запись в тот каталог, куда он пытается сохранить новый файл .class. Чтобы ошибка исчезла: предоставьте компилятору дополнительные права (запустите от имени администратора), либо сохраняйте в папку, на которую у текущего пользователя имеются права записи.

Ошибка «class is public, should be declared in a file named»

который заканчивается примерной такой ошибкой

означает, что вы неправильно назвали класс в исходном коде программы. Имя класса должно совпадать с именем файла. В данном случае файл называется Welcome.java, а класс внутри программы назван Welcomee

Error: Could not find or load main class

Если попытаться запустить программу следующим образом:

то возникнет ошибка

Причина её в том, что не нужно было добавлять к названию файла расширение .class. Виртуальная машина автоматически добавляет расширение и в приведённом примере она ищет файл Welcome.class.class

Ошибка Error: Could not find or load main class при запуске Java программы по абсолютному пути

Эта ошибка возможно при запуске Java программы по абсолютному пути:

Ошибка возникает как в Windows, так и в Linux:

Если в терминале вы находитесь в той же директории, что и файл, который вы запускаете, то не нужно указывать абсолютный путь. Например, нужно запускать так:


Если же вы находитесь в другой директории, то нужно использовать опцию -cp, после которой указать путь до каталога, где размещена запускаемая программа. А далее указать запускаемый файл без расширения .class:


Как видно из скриншота, командная строка находится в папке C:\WINDOWS\system32. Файл, который нам нужно запустить, находится в папке C:\ (корень диска). Мы указываем после ключа -cp папку C:\, а затем пишем имя файла программы без расширения – Welcome.

Аналогично нужно поступать в Linux. Пример команды:

Ошибка Main method not found in class

Если при запуске вы столкнулись с ошибкой:

Это означает, что вы не указали метод main, либо написали слово неправильно (например, Main вместо main).

Особенности компиляции и запуска Java программ в Windows

Команда "javac" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

Эта ошибка рассмотрена чуть выше. Для установки и настройки переменных окружения в Windows обратитесь к инструкции «Установка Java (JDK) в Windows».

Проблема с кодировкой в Java программах в командной строке Windows

Если вы написали программу, которая выводит кириллицу в консоль:

А в качестве результата получили крякозяблы:


Значит кодировка, в которой выводит строки ваша программа, отличается от кодировки командной строки Windows.

Для того, чтобы смена кодировки командной строки Windows не сбрасывалась после закрытия и открытия командной строки, можно внести изменения в реестр Windows. Для этого нажмите Win+x, выберите «Выполнить», в открывшееся окно введите regedit. В открывшейся программе (редактор реестра Windows) перейдите к [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun] и измените (или добавьте) значение на @chcp 65001>nul

Рассмотрим, из каких частей состоит проект NetBeans. На рисунке показаны основные элементы, отображаемые в среде разработки.

Это Source Packages (пакеты исходного кода), Test Packages (пакеты тестирования), Libraries (библиотеки) и Test Libraries (библиотеки поддержки тестирования). Ветви дерева представления элементов проекта можно разворачивать или сворачивать путем нажатия на узлы, отмеченные плюсами и минусами. Мы пока будем пользоваться только пакетами исходного кода.

В компонентной модели NetBeans пакеты приложения объединяются в единую конструкцию – модуль . Модули NetBeans являются базовой конструкцией не только для создания приложений, но и для написания библиотек. Они представляют собой оболочку над пакетами (а также могут включать в себя другие модули).

В отличии от библиотек Java скомпилированный модуль – это не набор большого количества файлов, а всего один файл , архив JAR ( Java Archive, архив Java ). В нашем случае он имеет то же имя, что и приложение , и расширение . jar : это файл JavaApplication1.jar. Модули NetBeans гораздо лучше подходят для распространения, поскольку не только обеспечивают целостность комплекта взаимосвязанных файлов, но и хранят их в заархивированном виде в одном файле, что намного ускоряет копирование и уменьшает объем занимаемого места на носителях.


Отметим не очень удобную особенность NetBeans – после сохранения проекта и закрытия среды разработки не сохраняется конфигурация открытых окон и развернутых деревьев проекта - деревья проектов показываются в свернутом виде. Поэтому для того, чтобы вновь попасть в режим редактирования исходного кода нашего приложения, в окне Projects, "Проекты" (левом верхнем окне среды разработки) следует развернуть последовательность узлов JavaApplication1/Source Packages/javaapplication1/. Это делается нажатием на плюсики в соответствующих узлах или двойным щелчком по имени узла. Затем надо сделать двойной щелчок с помощью левой кнопкой мыши по имени узла Main.java, либо с помощью щелчка правой кнопкой мыши по этому имени открыть всплывающее меню и выбрать в нем первый пункт – "Open".

Имеется и более простой способ. По умолчанию сначала открывается окно Welcome ("Привет", "Приветствие"). Но среда разработки сохраняет список открытых окон, и в верхней части окна редактирования кода щелчком мыши можно выбрать нужное имя окна . Хотя при этом не видна структура проекта, так что первый способ во многих случаях может быть предпочтительным (однако, вы можете увидеть открытый файл в структуре проекта, если нажмёте ctrl+ shift +1).

Если вы открываете новый проект, старый не закрывается. И в дереве проектов видны все открытые проекты. То же относится и к списку открытых окон. Это позволяет работать сразу с несколькими проектами, например – копировать в текущий проект участки кода из других проектов. Один из открытых проектов является главным ( Main Project ) – именно он будет запускаться на исполнение по Run/ Run Main Project. Для того, чтобы установить какой-либо из открытых проектов в качестве главного, следует в дереве проектов с помощью правой кнопки мыши щелкнуть по имени проекта и выбрать пункт меню Set Main Project. Аналогично, для того, чтобы закрыть какой-либо из открытых проектов, следует в дереве проектов с помощью правой кнопки мыши щелкнуть по имени проекта и выбрать пункт меню Close Project.

Рассмотрим теперь структуру папок проекта NetBeans. По умолчанию главная папка проекта располагается в папке пользователя. В операционной системе Windows® XP проект по умолчанию располагается в папке C:\Documents and Settings\ИмяПользователя\. Дальнейшее расположение папок и файлов приведено ниже, при этом имена папок выделены жирным шрифтом, а имена вложенных папок и файлов записаны под именами их головных папок и сдвинуты относительно них вправо.

  • В папке build хранятся скомпилированные файлы классов, имеющие расширение .class.
  • В папке dist - файлы, предназначенные для распространения как результат компиляции (модуль JAR приложения или библиотеки, а также документация к нему).
  • В папке nbproject находится служебная информация по проекту.
  • В папке src - исходные коды классов. Кроме того, там же хранится информация об экранных формах (которые будут видны на экране в виде окон с кнопками, текстом и т.п.). Она содержится в XML-файлах, имеющих расширение .form.
  • В папке test - сопроводительные тесты, предназначенные для проверки правильности работы классов проекта.

Приведем перевод файла README.TXT, находящегося в папке dist - там же, где архив JAR , предназначенный для распространения как файл приложения:

ОПИСАНИЕ ВЫВОДА КОМПИЛЯЦИИ

Когда Вы компилируете проект приложения Java, которое имеет главный класс, среда разработки (IDE) автоматически копирует все файлы JAR-архивов, указанные в classpath ваших проектов, в папку dist/lib. Среда разработки также автоматически прибавляет путь к каждому из этих архивов в файл манифеста приложения ( MANIFEST.MF ).

Чтобы запустить проект в режиме командной строки, зайдите в папку dist и наберите в режиме командной строки следующий текст:

Чтобы распространять этот проект, заархивируйте папку dist (включая папку lib ), и распространяйте ZIP-архив.

  • Если два JAR-архива, указанные в classpath ваших проектов, имеют одинаковое имя, в папку lib будет скопирован только первый из них.
  • Если в classpath указана папка с классами или ресурсами, ни один из элементов classpath не будет скопирован в папку dist.
  • Если в библиотеке, указанной в classpath, также имеется элемент classpath , указанные в нем элементы должны быть указаны в пути classpath времени выполнения проектов.
  • Для того чтобы установить главный класс в стандартном проекте Java, щелкните правой кнопкой мыши в окне Projects и выберите Properties. Затем выберите Run и введите данные о названии класса в поле Main Class. Кроме того, Вы можете вручную ввести название класса в элементе Main-Class манифеста .

2.8. Создание в NetBeans приложения Java с графическим интерфейсом

Экранной формой называется область, которая видна на экране в виде окна с различными элементами - кнопками, текстом, выпадающими списками и т.п. А сами эти элементы называются компонентами.

Среды, позволяющие в процессе разработки приложения в интерактивном режиме размещать на формы компоненты и задавать их параметры, называются RAD -средами. RAD расшифровывается как Rapid Application Development - быстрая разработка приложений.

В NetBeans и других современных средах разработки такой процесс основан на объектной модели компонентов, поэтому он называется Объектно-Ориентированным Дизайном ( OOD – Object-Oriented Design ).

NetBeans является RAD -средой и позволяет быстро и удобно создавать приложения с развитым графическим пользовательским интерфейсом ( GUI ). Хотя языковые конструкции Java , позволяющие это делать, не очень просты, на начальном этапе работы с экранными формами и их элементами нет необходимости вникать в эти тонкости. Достаточно знать основные принципы работы с такими проектами.

С точки зрения автора, изучение того, как создавать приложения с графическим интерфейсом, весьма важно для начинающих программистов, и это следует делать с самых первых шагов по изучению Java .

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

Во-вторых, такой интерфейс при решении какой-либо задачи позволяет лучше сформулировать, какие параметры надо вводить, какие действия и в какой последовательности выполнять, и что в конце концов получается. И отобразить все это на экране: вводимым параметрам будут соответствовать пункты ввода текста, действиям – кнопки и пункты меню , результатам – пункты вывода текста.

Пример открытия проекта с существующим исходным кодом


увеличить изображение
Рис. 2.12. Пример открытия проекта с существующим исходным кодом

В NetBeans 5.0 имелся хороший пример GUI -приложения, однако в NetBeans 5.5 он отсутствует. Поэтому для дальнейшей работы следует использовать пример JavaApplicationGUI_example , ссылка на который дана в начале лекции.

Сначала следует распаковать zip- архив , и извлечь находящуюся в нем папку с файлами проекта в папку с вашими проектами (например, C:\Documents and Settings\User ). Затем запустить среду NetBeans, если она не была запущена, и закрыть имеющиеся открытые проекты, чтобы они не мешали. После чего выбрать в меню File/Open Project, либо или на панели инструментов иконку с открывающейся фиолетовой папочкой, либо нажать комбинацию клавиш <Shift>+<Ctrl>+O. В открывшемся диалоге выбрать папку JavaApplicationGUI_example (лучше в нее не заходить, а просто установить выделение на эту папку), после чего нажать кнопку Open Project Folder.

При этом, если не снимать галочку "Open as Main Project", проект автоматически становится главным.

В окне редактора исходного кода появится следующий текст:

Поясним некоторые его части. Указание пакета java_gui_example , в котором будет располагаться код класса приложения , нам уже знакомо. Декларация самого класса GUI_application в данном случае несколько сложнее, чем раньше:

Она означает, что задается общедоступный класс GUI_application , который является наследником класса JFrame , заданного в пакете swing , вложенном в пакет javax . Слово extends переводится как "расширяет" ( класс -наследник всегда расширяет возможности класса-прародителя).

Общедоступный конструктор GUI_application() создает объект приложения и инициализирует все его компоненты, методом initComponents() , автоматически генерируемом средой разработки и скрываемом в исходном коде узлом +Generated Code . Развернув узел, можно увидеть реализацию этого метода, но изменить код нельзя. Мы не будем останавливаться на том, что в нем делается.

Далее следует закрытый ( private ) метод

Он будет обсуждаться чуть позже. Метод

нам уже знаком – это главный метод приложения. Он является методом класса нашего приложения и автоматически выполняется Java -машиной при запуске приложения. В данном примере метод создает экранную форму приложения и делает ее видимой. Для того, чтобы понять, как это делается, потребуется изучить довольно много материала в рамках данного курса.

Далее следует область объявления компонентов– пунктов меню нашей формы. Она автоматически создается в исходном коде редактором экранных форм и недоступна для изменения в редакторе исходного кода.

Запущенное приложение

Приложение с раскрытым меню

При запуске приложения экранная форма выглядит так, как показано на рисунке. В ней уже имеется заготовка меню , которое способно разворачиваться и сворачиваться, и даже работает пункт Exit – " Выход ". При нажатии на него происходит выход из приложения.

Именно за нажатие на этот пункт меню несет ответственность оператор exitMenuItemActionPerformed . При проектировании экранной формы он назначен в качестве обработчика события – подпрограммы, которая выполняется при наступлении события. В нашем случае событием является выбор пункта меню Exit, и при этом вызывается обработчик exitMenuItemActionPerformed . Внутри него имеется всего одна строчка

Она вызывает прекращение выполнения метода main и выход из приложения с нулевым кодом завершения . Как правило, ненулевой код завершения возвращают при аварийном завершении приложения для того, чтобы по его значению можно было выяснить причины "вылета" программы.

Читайте также: