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


Автор: maxius 30.4.2004, 19:33
Написал приложение на Java (пара тройка классов), можно ли сделать так, чтобы оно было полностью независимым т.е. чтобы оно запускалось на любой машине, не требуя установки всего компилятора, за исключением VJM. (Например как в С есть исполняющий *.exe файл). В JAVA только *.bat ???
(надеюсь проблему изложил понятно)

Автор: simanyay 30.4.2004, 19:58
Судя по изучению структуры NetBeans IDE, jEdit etc. я обнаружил, что они все делают свой скрипт (а иногда и EXEшники) для конкретной системы. Т.е. в NetBeans IDE в папке bin находятся следующие файлы:
runide.bat - Windows
runidew.exe - Windows executable
runide.sh - Linux
etc.
Надеюсь, что помог
Добавлено @ 20:01
Только что заметил, что они написали установщик (*.jar) и он настраивает всё под конкретную систему.
И только что меня осенило, что если юзер поставил JVM, то ему достаточно java и java -jar

Автор: maxius 30.4.2004, 20:03
Спасибо, гляну...

Автор: maxius 30.4.2004, 20:20
Честно говоря понятия не имею как выполнять данную операцию.

Если правильно понял создать EXE-шник средствами Java можно ???

Автор: DarkDS 30.4.2004, 21:59
Цитата(maxius @ 30.4.2004, 20:20)
Честно говоря понятия не имею как выполнять данную операцию.

Если правильно понял создать EXE-шник средствами Java можно ???

Нет. Средствами ява создать ехе ты не можешь. Есть утилиты, которые трансируют ява байт код в машинный код (где то был тред про них)
Средствами ява можно создать jar файл (как его создавать тоже тред был). А вот этот файл как раз запускается средствами JVM
То есть для запуска jar файла тебе нужно:
1, Уставновленная JVM (к примеру JRE от сана)
2. сам jar файл.
Запуск последнего можно произвести так:
1. java -jar yourfile.jar (это команда действует только когда в майнфест файле прописан майн класс)
2. java -cp yourfile.jar package.MainClass (если майн класс лежит в корне, то пакедж не пишется. Майн класс - класс с майн методом. пишется без расширения)
Добавлено @ 22:00
ЗЫ. бат файл в чаще всего содержит одну из 2-х последних команд.

Автор: LSD 30.4.2004, 22:44
Есть утилиты которые позволяют создавать исполняемые файлы из jar-ов. Например JBuilder может такое делать, создается исполняемый файл, который по сути представляет собой jar архив с запускающим его модулем и все, есть и сторонние утилиты для этих целей. На крайний случай можно воспользоваться саморапаковывающимися архивами. Но все эти методы требуют установленной Java машины.
А по поводу полного перевода байт-кода, в native код, это на мой взгляд возможно, только в ОЧЕНЬ ограниченном числе случаев (хотя я видел упоминание о компиляторе из Java в Си).

Автор: sergejzr 1.5.2004, 02:49
есть такая вещь gcj на всяких linux'ax пашет прекрасно. К сожалению на windows требует cygwin, потому что его версии, которые мне попадались были скомпилированы именно на cygwin'e. Чисто теоретически gcj можно скомпилировать например с VC++. Тогда должен работать без Cygwin'a.

Автор: simanyay 1.5.2004, 19:12
Цитата
есть такая вещь gcj на всяких linux'ax пашет прекрасно. К сожалению на windows требует cygwin, потому что его версии, которые мне попадались были скомпилированы именно на cygwin'e. Чисто теоретически gcj можно скомпилировать например с VC++. Тогда должен работать без Cygwin'a.


А зачем это под Линуксом? Там можно настроить систему так, что Java проги будут запускаться как обычные. Т.е. не надо писать java myjavaprogram, а можно просто myjavaprogram. И чем это отличается от EXE? Под Windows, когда ставиться JRE, то все .jar файлы автоматически запускаются через javaw. Так что я просто два раза кликаю (ну или, чаще всего, нажимаю Enter) и JAR запускается.

Автор: Гость_maxius 4.5.2004, 16:27
Огромное спасибо всем, я получил ответ на свой вопрос.

Автор: LSD 6.5.2004, 20:39
Цитата(simanyay @ 1.5.2004, 19:12)
А зачем это под Линуксом? Там можно настроить систему так, что Java проги будут запускаться как обычные. Т.е. не надо писать java myjavaprogram, а можно просто myjavaprogram. И чем это отличается от EXE? Под Windows, когда ставиться JRE, то все .jar файлы автоматически запускаются через javaw. Так что я просто два раза кликаю (ну или, чаще всего, нажимаю Enter) и JAR запускается.

Такого поведения можно и в виндах добиться: достаточно прописать ассоциации class, jar и PATHEXT добавить class и jar.

2 sergej.z
А можно ссылочку?

Автор: sergejzr 6.5.2004, 22:35
Что бы тебе не заниматься поиском зря, сообщу пару важных вещей, которые возможно сразу покажут подходит или не подходит тебе решение GCJ.
Пару пунктов за и против.

пункты против существуют только для виндов:
  • Как я уже говорил, мне не встречалась версия гцй, которая работала бы без CYGWIN'а. Проблема в том, что созданные таким образом проложения тоже не работают без CYGWIN'а.
  • Если ты хочешь использовать графику в виндах - встретятся проблемы. Дело в том, что GCJ использует графические библиотеки, которые так же должны быть установлены.
за:
  • Обьектно-ориентированный язык Ява со всеми его преимуществами. В том числе без проблем с деструкцией.
  • Ехе работает значительно быстрее JVM'а
  • GCJ компилирует не только исходный, но и байтный код(*.класс)
  • Так как GCJ - составная часть GCC, её разработка идёт полным ходом. Надеюсь в ближайшее время увидеть решение вышеописанных проблем.
Как я уже говорил на Юни/Линуксах никаких проблем. Если там установлен GCC, то GCJ и все прибамбасы скорее всего тоже есть.

Ну, а теперь, если тебя не смущают вышеизложенные пункты, линьки по сабжу:

http://gcc.gnu.org/java/
http://gcc.gnu.org/install/specific.html#windows
http://www.cygwin.com/


Автор: temporary 8.5.2004, 12:25
Тема уже была http://forum.vingrad.ru/index.php?act=ST&f=9&t=10136

Автор: Likurg 9.5.2004, 20:08
Я создал ексешник с помощью JET, на моем компе все ок,а на чужом появляется командная строка и исчезает,ничего не запускается, что делать не подскажите?

Автор: LSD 9.5.2004, 22:33
Попробуй начать с минимума: скомпилируй HeloWorld и проверь как он работает. Если заработает то проблема в твоей программе (вернее поиск надо вести в ней), а если нет значит надо смотреть на еастройки JET-а: целевая платформа, используемые библиотеки и т.д.

Автор: Stvan 11.5.2004, 06:48
Тоже попробовал jet, все зашибись, но при запуске программы появляется досовское окошко. Может кто знает как его убрать ?

Автор: Likurg 11.5.2004, 14:14
Stvan
а ты пробовал запускать эту программку в ексешники на другом компе?где нету jet?

Автор: ElectricalStorm 11.5.2004, 19:17
тоже пользовался JET мне непонравилось на своей скомпилил - работает на другой нет sad.gif

Автор: Stvan 12.5.2004, 08:01
На другой не пробовал, у меня personal edition не даст собака.
А кряка нет случайно у кого-нибудь ?

Автор: fplab 12.5.2004, 09:29
Поглядите http://www.dobysoft.com/products/nativej/index.html. Сам не пробовал, но вдруг это то, что надо

Автор: Stvan 14.5.2004, 03:21
Тоже неплохо, но она создает только запускалку.
А вот Excelsior Jet это вещчь. Попробовал я на другой машине. В общем дела обстоят так:
Компилированый экзешник на другой машине просто так не работает, НО в комплект входит
JetPackII. Он создает инсталяшку для вашей программы в которую пакует необходимые dll, и при запаковке также можно засунуть JRE. Получается обычная инсталяшка которая установит приложение куда указано, есть унинстал.

Автор: AntonSaburov 14.5.2004, 09:52
Цитата
Он создает инсталяшку для вашей программы в которую пакует необходимые dll, и при запаковке также можно засунуть JRE. Получается обычная инсталяшка которая установит приложение куда указано, есть унинстал.

Так тогда я смысла не вижу - берем тот же Инстал Шилдт Профешионал и делаем весьма приличную инсталяху с тем же JRE. Пакет очень мощный - на нем можно программы писать.

Автор: Likurg 15.5.2004, 20:10
AntonSaburov
Так и делаю.

Автор: ShurikA 11.12.2005, 15:02
Цитата(LSD @ 30.4.2004, 21:44)
... Например JBuilder может такое делать, создается исполняемый файл, который по сути представляет собой jar архив с запускающим его модулем и все, есть и сторонние утилиты для этих целей. ...

Ты не мог бы подсказать как ето делается в JBuilder?

Автор: LSD 11.12.2005, 19:33
Вначале создаем исполняемый JAR: File\New\Archive\Application указываем там параметры архива, Name - имя под которым он будет фигурировать в проекте, File name имя JAR-файла, можно указать чтобы используемые библиотеки добавлялись в этот же JAR (но можно в итоге получить архив весом в десяток, другой мегабайт), указываем каком классе находится main.
Затем создаем исполняемый файл: File\New\Archive\Executable JAR, аналогично даем имя и указываем ранее созданный архив (если файл не появился, то надо у проекта сделать Rebild), указываем под какие платформы мы хотим получить exe-шник и имена если надо.

Автор: ShurikA 11.12.2005, 20:53
LSDБлагодарю!

Автор: LSD 11.12.2005, 20:55
Да пожалуйста smile

Автор: Berliner 14.12.2005, 10:18
Цитата
Судя по изучению структуры NetBeans IDE, jEdit etc. я обнаружил, что они все делают свой скрипт (а иногда и EXEшники) для конкретной системы. Т.е. в NetBeans IDE в папке bin находятся следующие файлы:
runide.bat - Windows
runidew.exe - Windows executable
runide.sh - Linux
Классная инфа только что-то я не найду папку bin в NetBeans
Добавлено @ 10:18
где она?

Автор: s8e8r8g8e 20.11.2006, 22:19
эээ, изначально вопрос был не полностью независимым, а есть jvm, 
и из-за этого тащить cygwin и всё остальное это уж слишком, достаточно потребовть например чтоб жава в путях была, тогда на сях будет одна строчка для запуска (если бат чем-то не нравится), или чуть больше строчек если ещё рядом какой конфиг положить

Автор: sergejzr 20.11.2006, 22:44
Если jvm установлена, ехе не нужен. Jar также по клику запускается.

Автор: 1802 21.1.2007, 15:39
народ! все не так просто, как вы думаете. например, я захотел отправить свою прогу по Е-маил. надо, что бы она весила как можно меньше, и работала на любой машине после установки. так как это сделать???!!! я же не буду отправлять 30-метровые письма.

Автор: Bozo 22.1.2007, 00:14
Цитата(1802 @  21.1.2007,  15:39 Найти цитируемый пост)
народ! все не так просто, как вы думаете. 
Пиши на асме

Автор: Metal_Heart 22.1.2007, 10:34
1802, 
Во-первых размер зависит от самой проги! 
Во вторых, ты можешь требовать, чтоб у клиента была установлена JVM версии тако-то, в результате твой class или jar файл "Hello world" будет весить сущие пустяки.

Добавлено @ 10:35 
Bozo, ты сюда хулиганить пришел?!  smile 

Автор: Ortega 22.1.2007, 11:20
Цитата(sergejzr @  20.11.2006,  22:44 Найти цитируемый пост)
Если jvm установлена, ехе не нужен. Jar также по клику запускается.

не всегда... Если ставился Винрар, то он, зараза, ассоциации перехватывает - и по дабл-клику открывается архив.

Добавлено @ 11:27 
1802, единственно ограничение на машину, на которой должна запускаться твоя прога - наличие жре. В таком случае размер твоей проги, упакованной в джар будет измеряться в килобайтах. 
А вот если ты хочешь, чтобы она запускалась даже на машине, на которой жре не стоит, тут уже ничего не поделаешь, за все надо платить

Автор: w1nd 22.1.2007, 11:51
У меня предложение к автору темы: написать навороченную (конкурентноспособную) игрушку, которая не зависит от операционной системы и видеокарты. И чтобы по почте посылать можно было. 

Если идея покажется не самой свежей, вот второй вариант: создать программу, независимую от компьютера.


Автор: LSD 22.1.2007, 12:01
Цитата(1802 @  21.1.2007,  15:39 Найти цитируемый пост)
народ! все не так просто, как вы думаете. например, я захотел отправить свою прогу по Е-маил. надо, что бы она весила как можно меньше, и работала на любой машине после установки. так как это сделать???!!! я же не буду отправлять 30-метровые письма.

И что? Тут вроде никто не говорил, что это идеальное решение, но иногда оно бывает весьма удобно. 

Я считаю, что прикладное приложение которое работает с сетью просто обязанно иметь exe файл. По той простой причине, что правила файервола настраиваются именно для приложения, а не для строки запуска и для файервола java -jar some.jar и java -jar other.jar, идентичны. (это в первую очередь справедливо для Windows, хотя и для *nix тоже актуально).

Автор: val_vp 22.1.2007, 12:14
LSD, 
Цитата

Я считаю, что прикладное приложение которое работает с сетью просто обязанно иметь exe файл. По той простой причине, что правила файервола настраиваются именно для приложения, а не для строки запуска и для файервола java -jar some.jar и java -jar other.jar, идентичны. (это в первую очередь справедливо для Windows, хотя и для *nix тоже актуально).

сорри не понял как под линём файервол (iptables) по имени программы фильтрует - он же вроде по портам по адресам и т.д.
это не под...б мне это реально интересно

Автор: chief39 22.1.2007, 12:28
Цитата(w1nd @  22.1.2007,  11:51 Найти цитируемый пост)
У меня предложение к автору темы: написать навороченную (конкурентноспособную) игрушку, которая не зависит от операционной системы и видеокарты. И чтобы по почте посылать можно было. 

Если идея покажется не самой свежей, вот второй вариант: создать программу, независимую от компьютера.

Пять баллов! smile 


Автору: не слишком ли жёсткие требования?
И кто их сформулировал?

Автор: LSD 22.1.2007, 12:55
Цитата(val_vp @  22.1.2007,  12:14 Найти цитируемый пост)
сорри не понял как под линём файервол (iptables) по имени программы фильтрует - он же вроде по портам по адресам и т.д.

Я сам не линуксоид, просто я спросил знакомого, он сказал, что вроде это возможно сделать.

Автор: batigoal 22.1.2007, 22:55
Цитата(w1nd @  22.1.2007,  12:51 Найти цитируемый пост)
У меня предложение к автору темы: написать навороченную (конкурентноспособную) игрушку, которая не зависит от операционной системы и видеокарты. И чтобы по почте посылать можно было. 

А был же ассемблерный Doom3. 150 Кб и качество - как у его ДВДшного "прототипа"

Молчу, молчу

Автор: chief39 22.1.2007, 22:59
Цитата(batigoal @  22.1.2007,  22:55 Найти цитируемый пост)
А был же ассемблерный Doom3. 150 Кб и качество - как у его ДВДшного "прототипа"

А что есть зависимее ассебла? Только машинный код smile

Цитата(LSD @  22.1.2007,  12:55 Найти цитируемый пост)
Цитата(val_vp @  22.1.2007,  12:14 Найти цитируемый пост)
сорри не понял как под линём файервол (iptables) по имени программы фильтрует - он же вроде по портам по адресам и т.д.

Я сам не линуксоид, просто я спросил знакомого, он сказал, что вроде это возможно сделать. 

Он может и содержимое пропарсить, если не ошибаюсь. Всё равно через него каждый битик проходит

Автор: batigoal 22.1.2007, 23:06
Цитата(val_vp @  22.1.2007,  13:14 Найти цитируемый пост)
сорри не понял как под линём файервол (iptables) по имени программы фильтрует - он же вроде по портам по адресам и т.д.

Под виндой же умеет, почему под никсами нельзя?

Автор: val_vp 23.1.2007, 16:02
batigoal, можно но косвенно, при чем довольно сложно я поэтому и спросил как
ведь фильтр-пакетов в линуксе (iptables) работает по критериям для этого случая необходим критерий Owner, работающий по pid-ам gid-ам sid-ам вот ссылка http://www.opennet.ru/docs/RUS/iptables/#MATCHES
может через проксики это как-то?
сорри за оффтопик

Автор: batigoal 23.1.2007, 18:19
val_vp, попробуй задать этот вопрос в разделе по Юниху (http://forum.vingrad.ru/Linux-Unix.html). Думаю, там помогут.

Автор: val_vp 24.1.2007, 10:45
batigoal, проблема решена новой версией iptables там в критериях owner появилось поле  --cmd-owner <имя> - еще раз сорри за оффтопик

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