Пишу, по большей части, про историю, свою жизнь и немного про программирование.

DevelNext

Понадобилось тут по работе быстро накидать графическую утилиту под Виндоуз, пока шли совещания погуглил инструменты и случайно наткнулся на «ДевелНекст» — развитие «ДевелСтудио», о которой я писал восемь лет назад.

Внутри у неё свой диалект ПХП (JPHP), написанный на Джаве. Отличия от обычного интерпретатора, в основном, в стандартных функциях — они присутствуют не все, но чаще всего есть какие-то аналоги. Актуальная на текущий момент версия поддерживает синтаксис ПХП 7.1.

С документацией на сайте что-то странное — часть глав ведут на несуществующие страницы, впрочем, как я успел заметить, большая часть классов списана с Джавы, так что когда нужно было, я гуглил примеры и просто переписывал их на JPHP.

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

Потерял много времени, пытаясь найти пропавшую с сайта документацию — я догадывался, что всю работу надо выполнять в отдельном треде, чтобы не мешать интерфейсу прорисоваться, но не знал как это сделать. Пока случайно не попал в подраздел «Разного» — оказалось там притаилось решение моей проблемы.

Причём как оказалось, работать надо не просто в отдельном треде, так ещё и изменения интерфейса делать разрешается только через специальную обёртку — функции uiLater и uiLaterAndWait. Пример из документации:

$this->label->text = 'Поток выполняется...';

$thread = new Thread(function () {
    sleep(3); // ждем 3 сек.

    uiLater(function() {
        $this->label->text = 'Поток выполнен.';
    });
});

$thread->start();

На выходе получается обычный запускаемый файл (в моём случае — 3,3 мегабайта, немного по нынешним временам). Внутри — судя по всему, интерпретатор Джавы и скомпилированная в байт-код программа.

К сожалению, сразу нашёлся баг — если на компьютере пользователя установлена Джава младше версии 1.8, программа запускаться отказывается. Автор «ДевелНекста» вызвался помочь исследовать эту проблему, надеюсь скоро исправит.

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

8 комментариев
Алексей Томин 2018

Ещё немного, и поймёшь, что прослойка в виде JPHP не нужен, IDEA лучше чего-бы то ни было и перейдёшь для себя на kotlin/scala. Ну или хотя бы (брррр) groovy.

PS: «Простите, но робот решил, что это спам, поэтому комментарий не был отправлен...
Ну подпишусь Ф.И. а не ником и попробую ещё раз.

Евгений Степанищев 2018

Что-то из этого наверняка посмотрю, но нужда программировать что-то графическое у меня редко возникает.

Fyodor Ustinov 2018

На что только люди не идут, чтобы только паскаль не учить. :)

Евгений Степанищев 2018

На что только люди не идут, чтобы только паскаль не учить. :)

Будешь смеяться, но когда-то это был мой основной язык :)) Я на нём даже два диплома на продажу написал :)

bagir 2018

Я активно смотрю в сторону webview и golang. Очень даже приличные GUI приложения выходят.

Евгений Степанищев 2018

Bagir, тут графическая среда, как в «Делфи», компоненты можно накидывать на форму. Я прототип написал минут за 10 наверное.

аноним 2018

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

Читатель Читателев 2018

Да, багов очень много. Проект может просто вылететь с потерей прогресса. Может сохраниться с ошибками. Среда может просто не запускаться. Не советую использовать для чего-то, где нужна надежность хоть какая-то. Только поиграться или написать что-то мелкое.
P.S. Пользуюсь полтора года этой средой. Прогресса нет никакого.