Pull to refresh

Comments 48

Всё хочу когда-нибудь попробовать написать приложение для macOS на джаве с помощью rococoa. Кроссплатформенные графические интерфейсы всегда выглядят и ведут себя как что-то чужеродное.

Думаю нужно просто делать целостную визуальную концепцию приложения, как Photoshop или IDEA

А почему в качестве шаблонизатора и собственно печати PDF (а можно и напрямую на принтер, плюс в другие форматы) не использовали JasperReports под LGPL ? Там можно визуально рисовать шаблон (он, кстати, для экспорта в PDF и использует iText, насколько я помню).

С JasperReports у меня опыта работы не было. В голове почему-то отложилось, что это жутко сложная и жутко платная штука энтерпрайз уровня, требующая установки серверной части. Поэтому ее даже не стал смотреть.

ЦРПТ по умолчанию работает с шаблонам в формате JasperReports. И судя по обсуждениям мало у кого из пользователей получилось их самостоятельно обновить/доработать без приключений.

Много лет работаем с JasperReports и особо крупных проблем не возникало (хотя возможно когда-то давно их решили и забыли).

жутко платная штука энтерпрайз уровня, требующая установки серверной части

Это вы скорее всего говорите про JasperReports Server (и он под AGPL). Речь шла про JasperReports Library. А именно для визуального редактирования шаблонов ставится JasperSoft Studio под лицензией Eclipse. Единственно, конечно, что в Jasper'е плохо, что они начали еще делать редактор под Eclipse, а не под IDEA (которой мы пользуемся). Так бы было вообще замечательно.

Спасибо за комментарий, в будущем буду иметь ввиду.

Потому что для человека родной стек - Java.
ЗЫ Сейчас .NET отлично живет и на Линуксе с Макосью. Авалония, UNO, новомодный MAUI (тут пока без Линукса, к сожалению) вполне позволяют создавать кроссплатформенные интерфейсы.

Читать то я умею, хотелось бы от автора услышать. А вы я так понимаю, пресс секретарь?

Абсолютно так. Родной стек. При этом .NET в моем случае не дополняет его, а конкурирует с ним. В отличии, например, от того же JavaScript.

Поэтому не вижу смысла изучать еще один инструмент с похожим функционалом без острой необходимости.

Есть стоковый packager, который производит нативные запускаторы.
Вроде бы это:
https://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm
Давно это было, деталей не помню, помню, что даже maven plugin был и все автоматом собиралось, единственное неудобство - нужно собирать на целевой платформе, кроссбилдинга нет. Но это понятно, там еще и jre эмбеддится.

Этот вариант я тоже в свое время рассматривал, но упоминание NetBeans убавило энтузиазм :-)

Плюс - с launch4j я и ранее работал, в целом знаком с библиотекой. И она более универсальна, без привязки к JavaFx. В принципе в нее можно завернуть любой jar-ник.

Если и переходить на новые механизмы, то уж лучше сразу jpackage пробовать. (https://docs.oracle.com/en/java/javase/14/docs/specs/man/jpackage.html)

Кстати нет, NetBeans использовать не пришлось - видимо просто для примера там упомянули. Работает действительно только с GUI приложениями.

А для уважающего себя проекта они должны быть написаны — хотя бы юнит-тесты

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

А почему именно десктоп, а не веб сервис?

В первую очередь мощности. Они стоят денег. Плюс - единая точка отказа. В пиковые моменты внедрения маркировки вебсервисы по генерации кодов просто ложились. А так пользователь ограничен исключительно своими собственными вычислительными мощностями.

И не зависим от наличия интернета.

Чтоб не было нагрузок можно было frontend приложение сделать. Хотя, конечно, его б не на java пришлось писать. Как минимум вопрос с распространением приложения был бы проще. Не знаю, правда, есть ли для js все нужные библиотеки..

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

Аналогично с релизами. В случае с десктопом цена ошибки ниже. Если выявляется критическая бага, то пользователь просто будет пользоваться предыдущей версией. В одной из версий окно сканирования просто перестало открываться (не отследил при проверке). Пользователи просто рапортовали баг и продолжили пользоваться предыдущей версией. В случае с вебом мне пришлось бы все бросать, откатываться или срочно чинить.

Ну и по правде говоря - с интернетом у нас далеко не везде хорошо. Те же молочные фермы часто стоят в поле без связи. Им раз в неделю привозят флешку с файлами, они с ней и работают.

Так же нужно следить за хостингами, доступностями, SSL сертификатами и пр.

Github pages очень удобен в этом плане.


Аналогично с релизами. В случае с десктопом цена ошибки ниже. Если выявляется критическая бага, то пользователь просто будет пользоваться предыдущей версией.

В вебе релиз полностью под твоим контролем. Мне наоборот казалось, что это преимущество. Нашел багу — обновил сразу для всех. Нужно откатиться — для stateless сервиса это очень легко делается.


Но вообще ваше решение хорошо понятно и имеет безусловные плюсы. Особенно в контексте работы по флешке.

Да там не много пляски на 11 яве + отдельно fx поставить, за пару часов бы управились.

Тогда бы можно было уже попробовать и плюшки явы 8++ ,например Jigsaw

В своё время для ГУИ использовал SWT

Лаунчером был простой скрипт

start jre\bin\javaw -jar app.jar

jre добавлялось вручную. но это было до появления Packaging Tool

Наверное единственный оставшийся серьезный юзер у свинга -- это Jetbrains :) Он же по совместительству и основной контрибьютор.

Вообще нынче модно делать локальные веб приложения и паковать их в электрон. Если нужна обязательно Java, взять какой-нибудь Vaadin или Kotlin Multiplatform...

Я не автор , но Ваадин мне кажется довольно тяжеловесным для простого десктопного приложения

Вижу у проекта есть возможность доната. Если не секрет, народ донатит? Можно не сумму, а какую-то свою свою оценку. Просто часто вижу, что народ неохотно донатит на софт, даже когда он экономит им прилично денег.

Активно донатили на старте маркировки в 2020 г. Когда нужно было промаркировать остатки и коды печатались миллионами. Средний размер доната 300 - 500 р., 3-5 доната в месяц. Когда-то побольше, когда-то поменьше. Иногда приходили с запросами "мы вот хотим пару тысяч задонатить и нам вот такого вот функционала ну очень не хватает". Но это единичные случаи.

Сейчас уже в целом ситуация утряслась, донатов практически нет.

При этом при старте маркировки в Беларуси в конце 2021 года программа была рекомендована Электронным Знаком (аналог ЦРПТ в РБ) для печати кодов (они со мной предварительно связывались, согласовывали этот вопрос).

Скачиваний в РБ было порядка 5000. А вот донатов практически нет :-). Видимо воспринимается людьми как предоставляемое оператором.

Спасибо за информацию, примерно так и думал.

Да вроде это не новость что донаты в этой сфере не работают. Даже у крупных проектов основное финансирование идёт не от донатов рядовых пользователей.

Ну собственно я и не рассчитывал с донатов много заработать, это просто возможность для людей высказать благодарность в финансовом эквиваленте. Заодно с тех денег даже лицензию WinRar приобрел. Раз уж я его так активно использую для формирования SFX архивов.

Причем один раз даже просто позвонили, чтобы сказать спасибо. Было очень приятно :-)

Причем один раз даже просто позвонили, чтобы сказать спасибо. Было очень приятно :-)

Так понимаю, позвонили из того самого WinRar-а , я правильно понимаю? 😁😁

Непонятно

"Swing ... считается устаревшей технологией... Изначально проект был на Java 8, потому что у него еще есть поддержка JavaFx. В более старших версиях эту функцию убрали, поэтому потребуются определенные танцы с бубном для запуска приложения"

Тогда надо было делать на Swing без бубнов и на всех системах бы работало 

Интересно на чём нонче вообще дестктопные приложения пишутся, так чтобы модно, правильно и современно?

WinAPI, Windows Forms? Вроде устарело. Электрон - тормоз. Свинг не развивается.

QT - косяки и язык так себе.

Такое впечатление, что десктоп разработка застыла где-то в прошлом веке

Да электрон вроде исправляется. Года два назад было ужасно, но сейчас, кажется, более или менее стабильно, я даже я не замечаю, что приложение на электрон: Postman, Slack, Lens работают норм. Или это действительно не электрон приложения

Ну хз у кого на чем, а у меня для windows - Delphi VCL и с того же кода для Linux - FPC+Lazarus для GTK2. Альтернатив не сильно много: QT, Java FX, Flutter больше для мобилок, Delphi/Lazarus как ни странно. А вообще выскажу такую мысль, что возможно в нынешнее время в качестве десктопного GUI имело бы смысл затачивать игровые движки, ну типа Unity.

Сейчас еще есть graalvm.org, умеет делать нативные бинарники (в т.ч exe для win) без необходимости тащить с собой JVM.

На хабре есть статья от Отуса как они спринг бутовое приложение упаковывали в exe. Мне показалось, что в целом концепт интересен, но еще в экспериментальной стадии. Думаю к этому вопросу можно будет вернуться через год и посмореть какие были подвижки.

Как работающий на JavaFx более 5 лет, сильно рекомендую запаковать все требуемые библиотеки javafx прям в jar. Этим вы упростите себе жизнь, т.к. недокументированные особенности и баги меняются от версии к версии и то, что на вашей либерике работает нормально, на следующей либерике может поломаться.

Буду иметь ввиду, спасибо за совет.

Тоже в январские каникулы начал писать свой десктопный пет-проект на Java 9 - JavaFX вполне себе живее всех живых, использовал в связке с MvvmFx. Написал бОльшую часть функционала, но когда дошла речь до упаковки - просто ступор.

Сначала решил пойти путём "by design" и использовать jlink, надеясь на выходе получить красивый дистрибутив с кастомной JRE - в конце концов, именно для этого он и был придуман. Возможно, я неправильно их готовил, но, по моему опыту, модули из Java 9+ - это тихий ужас, когда в проекте много сторонних библиотек. Самый главный вопрос, который меня мучал - сколько еще, блин, раз я должен описывать свои зависимости? В pom.xml укажи, в module-info укажи, в аргументах jlink укажи. Что характерно, дистрибутив так и не собрался - где-то там в глубинах окопался автоматический модуль, работать с которым jlink отказался. Короче, бросил я этот кактус, и стал смотреть в сторону fatjar (господи, fatjar в 2022 году, классика не устаревает). Честно говоря, результаты меня тоже не очень удовлетворили - как по размеру, так и по процессу сборки.

Посмотрел я на свою коровенку и понял, что она в текущем виде предназначена для работы исключительно под Windows (там используются голосовые функции, которые, к сожалению, после долгого мучения с MaryTTS и CMUSphynx, пришлось реализовать в виде работы с Windows Speech API через прокси), поддержки ни Linux, ни мобильных OS не требуется (в виду специфики продукта).

И перетащил все на C# + WPF, благо бОльшая часть логики и тестов переносятся практически буквально (языковые конструкции отличаются в основном синтаксисом, stream API -> Linq, naming conventions поправляются IDE). Процесс перевода core занял один вечер, собственно, основное время заняло переписывание UI - давно я с WPF не работал, но в целом, процесс тоже не сложный. IDE - пересел с Jetbrains IDEA на Jetbrains Rider, в целом безболезненно.

Пока не жалею. WPF по функционалу - гораздо гибче JavaFX, хотя, конечно, не без нюансов. Практически все аналоги нужных библиотек имеются. Работа с Windows Speech - из коробки. Exe на выходе - из коробки.

А почему брали девятую джаву? Мне кажется правильнее использовать LTS версии. 8,11,17.

Лично мне удалось добиться, что дистрибутив собирается сам в архивчик со всеми необходимыми зависимостями по стандартному clean install. Но вот размер да, печалит. Хотя при нынешнем широкополосном интернете лишние 75 мб мне не кажутся критичными. Но если java начнут поставлять в составе стандартной собрки винды, как это сейчас происходит с .NET, то и необходимость добавлять jre в состав дистрибутива пропадет.

А почему брали девятую джаву

В комменте ошибся, сейчас посмотрел - 11-я. Но посыл был в том, что "уже не восьмая" :)

UFO just landed and posted this here

Такого рода задачи программой не решаются.

А как вы при печати qr формируете крипто-хвост?

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

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

Спасибо автору за классное ПО.

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

Донат тоже был.

А мы используем swing в своих проектах и не страдаем особо от того, что он не модный. Кроссплатформенность в порядке. Выглядит кондово по умолчанию, но ситуацию немного спасает например FlatLaF.

Sign up to leave a comment.