Кросплатформенность Java (известные грабли)

Модератор: Модераторы разделов

Аватара пользователя
Golden
Сообщения: 163
ОС: Ubuntu Linux 7.10

Кросплатформенность Java

Сообщение Golden »

(Deady @ Сентябрь 29 2004, 12:59) писал(а):
(Golden @ Сентябрь 29 2004, 14:57) писал(а):Единственная технология, обладающая реальной кросплатформенностью - Java, но и там на определенном этапе начинаются грабли (говорю, основываясь на личном опыте)

про грабли можно поподробнее? а то вдруг столкнуться придется.


Предлагаю подобные грабли выкладывать здесь.

Грабля первая: регистр в именах файлов.
Как известно, в Linux регистр учитывается, в Windows нет. Причем Windows 9x (включая ME) преобразовывают все имена к верхнему регистру, а NT/2000/XP на регистр просто не обращают внимания.
В итоге, начинаются глюки с открытием файлов в Java. Как правило решается написанием различных имплементаций для одного интерфейса (т.е. для каждой ОСИ свой код обработки)
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Кросплатформенность Java

Сообщение elide »

а что за глюки с открытием, если не секрет?
слава роботам!
Спасибо сказали:
Аватара пользователя
Golden
Сообщения: 163
ОС: Ubuntu Linux 7.10

Re: Кросплатформенность Java

Сообщение Golden »

(elide @ Сентябрь 29 2004, 14:18) писал(а):а что за глюки с открытием, если не секрет?

Я наблюдал несколько.
Первый, я видел в чужой программе, совершенно идиотский: под линукс-версию программа использовала два файла с одинаковым именем и в разном регистре. Пока все работало под Линукс, проблем не было. Как только попытались запустить на Windows (мы говорим про глюки кросплатформенности), то программа естественно тут же падала, поскольку вместо двух разных файлов получала один и тот же. Но это был, как я уже сказал, глюк идиотский. :)

Глюк, на который наткнулся я сам несколько лет назад (что и побудило меня исследовать эту проблему): в приложении имя файла было прописано жестко. Оно его без проблем сохраняло, но вот открывать не хотело. Как оказалось, не хотело из-за упомянутого выше преобразования регистра. Взращенная на sun'овских Unix JVM под Windows честно пыталась найти этот файл в нижнем регистре (как он и был задан), но не находила его, т.к. Win98 возвращала имена файлов в верхнем регистре. Решили это тогда сиюминутно переходом к имени файла в верхнем регистре при поиске файла. После чего приложение успешно проработало несколько лет и опять начало сваливаться на W2000, поскольку та отдает имя файла нормально (так, как оно реально записано на диске). После этого переписывалась вся часть приложения, отвечающая за работу с файлами "во избежание". Говорят, что в последних версиях JVM это уже пофиксено (не знаю, сам не пробовал)
Спасибо сказали:
Deady
Сообщения: 25

Re: Кросплатформенность Java

Сообщение Deady »

(Golden @ Сентябрь 29 2004, 17:39) писал(а):
(elide @ Сентябрь 29 2004, 14:18) писал(а):а что за глюки с открытием, если не секрет?

Я наблюдал несколько.
Первый, я видел в чужой программе, совершенно идиотский: под линукс-версию программа использовала два файла с одинаковым именем и в разном регистре. Пока все работало под Линукс, проблем не было. Как только попытались запустить на Windows (мы говорим про глюки кросплатформенности), то программа естественно тут же падала, поскольку вместо двух разных файлов получала один и тот же. Но это был, как я уже сказал, глюк идиотский. :)

Глюк, на который наткнулся я сам несколько лет назад (что и побудило меня исследовать эту проблему): в приложении имя файла было прописано жестко. Оно его без проблем сохраняло, но вот открывать не хотело. Как оказалось, не хотело из-за упомянутого выше преобразования регистра. Взращенная на sun'овских Unix JVM под Windows честно пыталась найти этот файл в нижнем регистре (как он и был задан), но не находила его, т.к. Win98 возвращала имена файлов в верхнем регистре. Решили это тогда сиюминутно переходом к имени файла в верхнем регистре при поиске файла. После чего приложение успешно проработало несколько лет и опять начало сваливаться на W2000, поскольку та отдает имя файла нормально (так, как оно реально записано на диске). После этого переписывалась вся часть приложения, отвечающая за работу с файлами "во избежание". Говорят, что в последних версиях JVM это уже пофиксено (не знаю, сам не пробовал)



прикольно ))))
тут даже не поможет держать имена файлов в конфиге - сам конфиг хз как открыть ..
Можно получить список всех файлов в каталоге, потом toUpperCase() и сравнить с шаблоном, выбрать нужный (который совпадает), его и открывать. Правда тут имена файлов разные должны быть.
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Кросплатформенность Java

Сообщение aLexx programmer »

А что мешает проверить папку на наличие, скажем, и CONFIG.INI, и config.ini, и имеющийся файл открыть? :blink: :blink: :blink:
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Кросплатформенность Java

Сообщение elide »

проблема в том, что нужно решение, а не обход проблемы....
хотя лично я, всегда используя строго lower case имена, с этим не сталкивался.... может потому, что юзаю *nix/win2k_и_старше_и_никаких_9х....
слава роботам!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Кросплатформенность Java

Сообщение t.t »

Что есть решение и что есть обход? Например, можно использовать, наобормот, строго upper-case. По идее, всюду должно работать.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: Кросплатформенность Java

Сообщение aLexx programmer »

aLexx programmer:
А что мешает проверить папку на наличие, скажем, и CONFIG.INI, и config.ini, и имеющийся файл открыть?


elide:
проблема в том, что нужно решение, а не обход проблемы....


Если это не решение, то решением являетя полный переход с Win 9x на win 2k и старше. Такие принципиальные различия нормально решить не получится. Если одна система различает регистр, а другая - нет, то даже JVM ничего поделать не сможет.

Да, кстати, а что вообще подразумевается под решением?
Спасибо сказали:
webdeveloper
Сообщения: 13

Re: Кросплатформенность Java

Сообщение webdeveloper »

А вообще компилятор для кросплатформенного программирование под java бесплатный?
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: Кросплатформенность Java

Сообщение ilich »

(webdeveloper @ Вторник, 21 Июня 2005, 18:09) писал(а):А вообще компилятор для кросплатформенного программирование под java бесплатный?

Который входит в состав коллекции компиляторов GNU на все сто. От Sun он вроде тож бесплатный (по крайней мере можно скачать, использовать, и никаких ограничений). Сейчас Sun вообще открыл исходники Java и он стала OpenSource. Единственное, я не знаю, можно ли ее бесплатно использовать при разработке коммерческих приложений. Может у кого есть опыт в решении данного вопроса? Поделитесь, буду очень признателен.
:D
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
webdeveloper
Сообщения: 13

Re: Кросплатформенность Java

Сообщение webdeveloper »

>Который входит в состав коллекции компиляторов GNU на все сто
А как именнно он называется?
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: Кросплатформенность Java

Сообщение ilich »

Вроде так и называется gcc-java. Взять можно Брать понятное дело тут (GCC Project)
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
RuSNoteS
Сообщения: 24

Re: Кросплатформенность Java

Сообщение RuSNoteS »

Не знай как сейчас, но раньше были проблемы с GUI (как и у mono впрочем), плюс еще тот недостаток, что свинговское гуи не обращает внимания на настройки ОС - не использует ее стили. Это собирались пофиксить - мжет и справили в 5-й версии.

А, вообще, кроме известного бага с регистром имен файлов - есть еше что-нибудь серьезное?
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: Кросплатформенность Java

Сообщение ilich »

(RuSNoteS @ Среда, 22 Июня 2005, 8:11) писал(а):Это собирались пофиксить - мжет и справили в 5-й версии.

Позовчера писал прогу с использованием Swing. Они там баг не пофиксили. У меня как испоьльзовался стандартный Swingовый интерфейс по-умолчанию, так и используется. А вообще сымитировать интерфейс системы можно при помощи UIManager. А еще можно вообще свой стиль сделать. Хотя тут есть одна бага. Если попытаться загрузить стиль Windows на Linux, то Java ругнется и загрузится со своим стандартным стилем. :(

А вот еще, что меня просто бесит в Java GUI, так это Layout Managers. Они работают овльно криво, что проявляется в жудком виде формы при изменении ее размеров (особенно при уменьшении). Причем ингда все работает так, как должно. :unsure:
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Аватара пользователя
Golden
Сообщения: 163
ОС: Ubuntu Linux 7.10

Re: Кросплатформенность Java

Сообщение Golden »

GUI в Java есть несколько. Кроме Swing есть еще AWT (стар, но работает) и SWT - использование родных библиотек win32 (Windows) и GTK+(Linux)

По поводу лицензирования и бесплатности: устал повторять
1. Java от Sun НЕ OpenSource
2. Есть спецификация Java, в соответствии с которой можно сделать OpenSource JVM (что собственно и делают несколько проектов)
3. Java бесплатна для использования для любых проектов (не считая коммерческих библиотек)
4. JVM/JDK от Sun не входит в большинство дистрибутивов Linux/FreeBSD из-за ограничений лицензии. Но любой может скачать их, установить и использовать с http://java.sun.com
Спасибо сказали:
RuSNoteS
Сообщения: 24

Re: Кросплатформенность Java

Сообщение RuSNoteS »

устал повторять
1. Java от Sun НЕ OpenSource


Мне кажется это уже можно не повторять:
Желащие скачать исходники могут сделать это отсюда
http://java.sun.com/j2se/1.5.0/download.jsp

Распространяются по лицензии SUN COMMUNITY SOURCE LICENSE (http://java.sun.com/j2se/1.5.0/scsl_5.0-license.txt)

В принципе Торвальдс и сообщество FSF относятся к этой инициативе Sun крайне прохладно.
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: Кросплатформенность Java

Сообщение ilich »

(Golden @ Среда, 22 Июня 2005, 12:02) писал(а):GUI в Java есть несколько. Кроме Swing есть еще AWT (стар, но работает) и SWT - использование родных библиотек win32 (Windows) и GTK+(Linux)


Ну, AWT - это жудкая вещь. А вот насчет SWT. У нас в компании собираются на нее переходить. Так что как заценю, рассскажу.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали: