Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > exe файл Java программы


Автор: dimoZa 9.10.2005, 22:02
Привет! Очень волнует вопрос создания еxe-файла Java программы. Конечно есть встроенная функция, начиная с версии JBuilder 7, создания экзэшника, но он запускаеться только на тех компах, у которых поставлен JDK, а мне нужно создать экзэшник такой, чтоб он мог запускаться на любом компе, не от чего не зависимо, кто знает как сделать помогите плиз.

Автор: batigoal 10.10.2005, 07:35
Исполнение Java-программы без JRE невозможно.
Воспользуйся поиском, тема частенько обсуждается. Существуют сторонние программы для создания exe-файлов, но все они требуют установки JRE (либо включают ее в дистрибутив).

Автор: LSD 10.10.2005, 09:36
Цитата(Lamer @ 10.10.2005, 08:35)
Существуют сторонние программы для создания exe-файлов, но все они требуют установки JRE (либо включают ее в дистрибутив).

Есть возможность полностью отказаться от JRE (вернее она будет в виде native кода вкомпилированна в приложение). Тема действительно неоднократно обсуждалась поищи по словам Jet Excelsior и GCJ.

Лично я пробовал Jet Excelsior, он действительно компилит в native код, приложение запускается без JRE, не требует никакой инсталяции. Единственное но, надо таскать с собой пару увесистых dll-ей.

Автор: vzf 10.10.2005, 10:37
Ну в линуксе можно скомпилировать java файл и получить исполняемый
Точно не помню, но что то вроде
> gcj Hello.java -o Hello.exe

могу ошибаиться в ключах запуска.

+ Есть какая-то утилита от Sun чтобы получить из класса exeшник, но не помню как называется, дома посмотрю

Автор: Бонифаций 10.10.2005, 10:42
gcj --main=Hello Hello.java -o Hello

И все.
Есть и под windows и под linux

Автор: dimoZa 10.10.2005, 14:22
Цитата
gcj --main=Hello Hello.java -o Hello

Это где набирать надо и как под Windows.
Добавлено @ 14:23
Цитата(LSD @ 10.10.2005, 09:36)
Единственное но, надо таскать с собой пару увесистых dll-ей.

Насколько увесистых?

Автор: LSD 10.10.2005, 15:36
Цитата(dimoZa @ 10.10.2005, 15:22)
Насколько увесистых?

5-30Мб.

Автор: Бонифаций 10.10.2005, 16:39
Цитата(LSD @ 10.10.2005, 15:36)
Цитата(dimoZa @ 10.10.2005, 15:22)
Насколько увесистых?

5-30Мб.

да ну, перестаньте,
вот у меня перед глазами скомпилированная небольшая явовская програмка с swt интерфейсом.
Сам exe файл - 1.2M,
swt-win32-3116.dll - 311K

из внешних зависимостей только kernel32.dll, advapi32.dll, msvcrt.dll, user32.dll и ws_32.dll - то естьто что обычно и использует самый стандартный экзешник.



Автор: LSD 10.10.2005, 17:01
Цитата
да ну, перестаньте,
вот у меня перед глазами скомпилированная небольшая явовская програмка с swt интерфейсом.
Сам exe файл - 1.2M,
swt-win32-3116.dll - 311K

из внешних зависимостей только kernel32.dll, advapi32.dll, msvcrt.dll, user32.dll и ws_32.dll - то естьто что обычно и использует самый стандартный экзешник.

1. Я говорил про тот exe-шник, что пораждает Jet Excelsior
2. Что то тут явно не так, в состав JRE входит порядка 14000 классов. и все эти классы скомплировались в 1.2M? Да я понимаю что не все они используются, но все равно графическое приложение 1500 классов должно использовать. К тому же куда делись нативные библиотеки JRE (awt.dll, java.dll, zip.dll - да вообщем полно их там)?

Автор: Бонифаций 10.10.2005, 18:28
Цитата(LSD @ 10.10.2005, 17:01)
2. Что то тут явно не так, в состав JRE входит порядка 14000 классов. и все эти классы скомплировались в 1.2M? Да я понимаю что не все они используются, но все равно графическое приложение 1500 классов должно использовать. К тому же куда делись нативные библиотеки JRE (awt.dll, java.dll, zip.dll - да вообщем полно их там)?

я наврал... smile я посмотрел на upx-нутый экзешник. Сейчас перетранслировал и посмотрел. Сам exe (стрипнутый) примерно 4М. Все остальное так как я написал. Насчет всех этих бибок, так ведь линкуются только те классы, которые используются в программе. awt к примеру не используется тут вообще.

java.dll и т.д. в gcj вообще нет. В них нету необходимости. Это же нативный компилятор, там достаточно нужный код в библиотеку закатать..




Автор: dimoZa 10.10.2005, 20:17
Большое спасибо всем ответившим. Из-за таких объемов логично будет использовать экзещник от Delphi, но увы я его не знаю, придеться че-нить придумывать.

Автор: Ch0bits 10.10.2005, 20:29
Цитата(LSD @ 10.10.2005, 09:36)
Jet Excelsior

А чё он какой огромный? 56mb дистрибутивчик... авось за ночь закачаю, заценю.

Кстати никто не сравнивал скорости работы .jar(.class) и откомпиленых(.exe) java-программ?
А как насчёт стабильности работы, никаких глюков не наблюдалось?

Автор: LSD 10.10.2005, 23:02
Цитата(Vadim999 @ 10.10.2005, 21:29)
А чё он какой огромный?

Да там у них своя мини IDE для компиляции (кстати явно написанная на Java).
Цитата(Vadim999 @ 10.10.2005, 21:29)
Кстати никто не сравнивал скорости работы .jar(.class) и откомпиленых(.exe) java-программ?

Во первых зайди в "Очередные данные о "медленности" JAVA" и посмотри пост Бонифаций. Во вторых я сравнивал, и у меня JRE показало лучший результат чем Jet Excelsior, хотя JRE была самая последняя а Jet Excelsior годовалой давности.


Цитата
java.dll и т.д. в gcj вообще нет.

Не может этого быть! В этой библиотеке содержатся native методы для всего java.lang, java.io и некоторых других. Отказаться от этих методов нельзя в принципе, поэтому или они сами их реализовывали, гарантируюя при этом одинаковость поведения с Sun-овскими методами, или просто используют уже имеющуюся библиотеку от Sun (или линкуя ее в exe-шник или динамически подключая по ходу дела). Плюс код для тех классов что исполюзуются, а байт код значительно компактнее кода x86 процессоров.

Попробуй скомпилить демку Java2D из состава JDK и посмтореть сколько она будет занимать. Только для чистоты эксперимента запускай на чистой машине, где нет JRE.

Автор: sergejzr 10.10.2005, 23:15
gcj для графики вообще gtk использует. Там сам экзешник маленький, но если все либы устанавливать, что ему нужны будут, то лучше уж поставить 15 МБ JRE и не мучаться.

К тому же весь пакет можно предоставить как одну программу. Посмотрите нашего охотника и инсталлятор к нему от Пегаса. Если не обращать внимание на стиль GUI, вообще можно не заметить, что прога на яве. А 15 МБ в наше время не вопрос. Хорошая прога должна минимум столько весить. Для важности smile

Автор: Бонифаций 11.10.2005, 09:43
Цитата(LSD @ 10.10.2005, 23:02)
Цитата
java.dll и т.д. в gcj вообще нет.

Не может этого быть! В этой библиотеке содержатся native методы для всего java.lang, java.io и некоторых других. Отказаться от этих методов нельзя в принципе, поэтому или они сами их реализовывали, гарантируюя при этом одинаковость поведения с Sun-овскими методами,

конечно сами. Это проект http://www.gnu.org/software/classpath/ ,совместимость там - ну новых модных штучек типа system.out.printf там нет, определенные странности наблюдаются , но в общем достаточно полная.

Автор: Бонифаций 11.10.2005, 09:58
Цитата(sergej @ 10.10.2005, 23:15)
gcj для графики вообще gtk использует. Там сам экзешник маленький, но если все либы устанавливать, что ему нужны будут, то лучше уж поставить 15 МБ JRE и не мучаться.

почему gtk?? что привяжешь, то и будет использовать. swt на windows к примеру напрямую без gtk работает..

А насчет 15М jre - посмотрите:

bash-2.05b$ pwd
/usr/lib/j2sdk1.4.2_04/jre
bash-2.05b$ du -sk .
62942 .

то есть примерно 63M

на windows:

bash-2.05b$ pwd
/win_e/jre
bash-2.05b$ du -sk .
50720 .

то есть 50M





Автор: LSD 11.10.2005, 09:58
Попробуй все же скомпилить Java2D. Вот она использует возможности Java2D API если не на 100% то уж на 80% точно. Мне интерестно она пойдет и насколько она шустрее будет.

P.S.
Цитата
из внешних зависимостей только kernel32.dll, advapi32.dll, msvcrt.dll, user32.dll и ws_32.dll - то естьто что обычно и использует самый стандартный экзешник.

Для запуска под виндой требуется cygwin?

Автор: Бонифаций 11.10.2005, 10:32
Цитата(LSD @ 11.10.2005, 09:58)
Для запуска под виндой требуется cygwin?

нет не требуется.

Автор: sergejzr 11.10.2005, 11:18
Цитата
почему gtk?? что привяжешь, то и будет использовать. swt на windows к примеру напрямую без gtk работает..

Потму что GCJ использует GTK.
Цитата
bash-2.05b$ pwd

/usr/lib/j2sdk1.4.2_04/jre
bash-2.05b$ du -sk .
62942 .

Ты знаешь разницу между JRE и JSDK ?

Автор: Бонифаций 11.10.2005, 11:41
Цитата(sergej @ 11.10.2005, 11:18)
Цитата
bash-2.05b$ pwd

/usr/lib/j2sdk1.4.2_04/jre
bash-2.05b$ du -sk .
62942 .

Ты знаешь разницу между JRE и JSDK ?

обратите внимание на каталог, в котором подсчитывался обьем файлов..

Ну если вы не хотите проверить это сами, давайте посмотрим на живом примере. идем на java.sun.com, выбираем загрузку J2SE™ Runtime Environment 5.0 Update 5 для линукса, он по списку 15.67М, скачиваем, получаем

bash-2.05b$ ls -alh
drwxr-xr-x 4 walrus wheel 280 2005-10-11 12:40 .
drwx--x--x 97 walrus wheel 11176 2005-10-11 09:00 ..
-rw-r--r-- 1 walrus wheel 16M 2005-10-11 12:38 jre-1_5_0_05-linux-i586.bin

Запускаем его, он спрашивает лицензию, производит устновку, заходим в результирующий каталог и смотрим
bash-2.05b$ cd jre1.5.0_05/
bash-2.05b$ du -sk .
87377 .

то есть результат после установки 87 тыщщ 1к блоков грубо говоря 87М
Какие уж там 15М? там только один rt.jar на 34М



Автор: sergejzr 11.10.2005, 12:24
Сносим яву с компа, совсем. Или берём комп. на котором явы не существовало ещё.
Идём на http://www.hunter.vingrad.ru/?view=downloads и качаем по первой ссылке Охотник 1.0 c JRE.
Запускаем инсталлятор. Работает smile
Всё удовольствие - 15.37 Мб

Ясное дело, что он распакуется и займёт сколько ему надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)