|
|
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Решил попробовать новые технологии в демке JavaFX v8. Старался писать минимум кода. - Всё работает, но смена курсора в 1 строке реально его меняет только на выходе из функции. А нужно сразу после клика. - В каком потоке, дополнительном или потоке ГУИ работает код в функции? Как немедленно в потоке ГУИ вызвать строку смены курсора? - Читал что в JavaFX УЖЕ всё сделано для асинхронной работы. Т.е. для асинхронности уже не нужно самому делать потоки. Верно или нет? Здесь особенность, что мне нужна безпоточная синхронность. Сначала курсор, потом ждём коннект 15 сек. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Спс. ______________________________________________ "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:24 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Petro123- Читал что в JavaFX УЖЕ всё сделано для асинхронной работы. Т.е. для асинхронности уже не нужно самому делать потоки. Верно или нет? Ссылку. Я такого не видел. От Swing мало чем отличается в этом плане. Точно так же нельзя блокировать EDT. initData() нужно вынести в фоновый поток Туториал https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm Набор полезных классов https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/package-summary.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:31 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczinitData() нужно вынести в фоновый поток увижу про хвалебные речи JavaFX - дам. Где то читал. Я сравниваю с Delphi. Там первая строка отработает всё равно. А тут, как будто всё что внутри выносится в отдельный поток и на выходе синхронизируется с потоком ГУИ. Неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:35 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczinitData() нужно вынести в фоновый поток вот это я не пойму. По уму и смыслу, мне надо ждать коннект. И не надо выносить ни в какой поток. Всё работает! Но из за строки курсора - выносить? Изврат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:37 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, счас пробую в потоках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:38 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Petro123Я сравниваю с Delphi. Там первая строка отработает всё равно. Есть мануал по теме? Petro123А тут, как будто всё что внутри выносится в отдельный поток и на выходе синхронизируется с потоком ГУИ. То есть ты и в Swing никогда не сталкивался? Суть в том что весь GUI работает в одном единственном потоке. Если ты в этом потоке занимаешься чем-то долгим, то весь GUI не работает, потому как потока нет, который бы что-то перерисовывал или события обрабатывал. Поэтому любые задачи длительностью больше долей секунды надо выполнять в фоновом потоке, а результат синхронизировать с EDT для правильного вывода в GUI. Разница между Swing и JavaFX только в том что в Swing пришлось ждать SwingWorker долгие годы. А в JavaFX уже куча полезных классов, чтобы просто и безболезенно отделить рабочий код от GUI/EDT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:48 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, теоретически, обёртка строки вот в это должна заставить выполнить код смены курсора в потоке ГУИ. Поток ведь пока не занят? Код: java 1. 2. 3. 4. 5. 6. Но всё по прежнему(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:49 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕсть мануал по теме? там события контролов платформа делает в основном потоке. AFAIK)) BlazkowiczЕсли ты в этом потоке занимаешься чем-то долгим, то весь GUI не работает, потому как потока нет, Я понимаю. Просто курсор операционки . И он меняется....очередь наверно другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:53 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Petro123теоретически, обёртка строки вот в это должна заставить выполнить код смены курсора в потоке ГУИ. Поток ведь пока не занят? Нет. В SwingUtils был другой метод. invokeAndWait. Из JavaFX аналогичный убрали. С ним бы прокатило. А runLater() ставит обновление в очередь, а поток GUI всё так же занят ожиданием соединения. Вообще для больших проектов лучше автоматизировать такие штуки Вот для Swing интересные решения http://www.javaspecialists.eu/archive/Issue075.html http://www.javaspecialists.eu/archive/Issue104.html Но чтобы их правильно перевести в JavaFX, нужно понять как оно работает. Так как в JFX гуя таки не блокируется, значит что-то они там хитрое таки намутили для этого. Я обычно горожу какое-то простое решение, которое само запускает прогресс бар вообще для любой потенциально долгой задачи (любая работа с сервером, будь то БД или HTTP) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:58 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вот код типичный на Delphi. Там везде один поток и это правильно. Где нужно делается асинхронность. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код выполняется построчно по БЛ. Тут у меня счас асинхронные микросервисы будут? ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 12:02 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯ обычно горожу какое-то простое решение, которое само запускает прогресс бар вообще для любой потенциально долгой задачи (любая работа с сервером, будь то БД или HTTP) вот, сижу и думаю. У меня коннект и заполнение таблички хрен занет сколько будет. Т.е. нужен прогрессбар бесконечный)) или курсор часики. Нда..................... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 12:03 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак как в JFX гуя таки не блокируется, значит что-то они там хитрое таки намутили для этого. ОК Спасибо! За 5 минут сменить курсор не получилось)))) Будет время буду копать. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 12:05 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
ещё интересная особенность платформы: - почему исключительная ситуация не выходит на самый верх в виде какого нибудь окошка? Например на это: Код: java 1. полное молчание. Окно с ошибкой только самому? В Delphi выйдет неказистое окно ошибки от платформы. Решение минимум это поставить руками хотя бы один обработчик Application? Так вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:27 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
Petro123, Так как вся гуя на одном потоке, то вешается handler на сам поток http://stackoverflow.com/questions/23612854/javafx-8-lombard-global-exception-handling Но вопрос ещё не закрыт, какие-то тёрки по поводу текущей реализации продолжаются https://bugs.openjdk.java.net/browse/JDK-8088773 По поводу прогресс бара, есть два хороших варианта. Если мы не хотим лочить UI, то это заводим постоянный прогресс в statusbar и все фоновые задачи завязываем на него. Если хочется залочить UI, то можно это сделать через модальный диалог. А можно через прозрачную панель и круговой ProgressIndicator. Таким образом можно, например, лочить часть UI, в отличие от диалога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:37 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак как вся гуя на одном потоке, то вешается handler на сам поток вот я и подумал, что они уже тут всё что можно отвязали от основного. Т.к. райзе в коде никак не выходят на экран. Это же не сервер с логами, а десктоп. Опупеть. Стока кода писать надо для утилиты админу)). Где то тут был код с хуком на Main() чтобы ловить все исключалки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:52 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
OK помониторил тему насчёт перехвата всех ошибок для своего рками alert! Код: java 1. 2. Оказалось что это тоже не просто)) авторAs of JavaFX 8, Thread.setDefaultUncaughtExceptionHandler(...) should work: see RT-15332. Things are a little complicated if an uncaught exception occurs during execution of the start(...) method. Depending on how the application is launched, the code that invokes start() (e.g. the implementation of Application.launch(...)) may catch the exception and handle it, which would obviously prevent the default exception handler from being invoked. http://stackoverflow.com/questions/26361559/general-exception-handling-in-javafx-8 а должно быть в десктопе по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 15:09 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак как вся гуя на одном потоке, то вешается handler на сам поток http://stackoverflow.com/questions/23612854/javafx-8-lombard-global-exception-handling Но вопрос ещё не закрыт, какие-то тёрки по поводу текущей реализации продолжаются https://bugs.openjdk.java.net/browse/JDK-8088773 спасибо! Вот так есть перехват: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 16:36 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
по первому вопросу выход найден. Курсор тоже делается через биндинг. Хотя конечно неудобно. Повторюсь, что если сравнивать с Delphi, то основной метод прикладного кода - синхронный без потоков. И в Delphi курсор успевает сменится на часики вероятно из за того что он не в Scene, а в операционке. Тогда курсор меняется и пользователь просто ожидает минуту-две все запросы к БД. ... В JavaFX это не работает и непонятно когда работает Платформа.runLater, и есть ли что либо для немедленно запуска строчки кода в основном потоке (синхронная работа). ... На данный момент чтобы работала смена курсора я обязан любой кусок кода оборачивать в поток и возвращение курсора ловить по окончании потока. Либо биндинг С ПОТОКАМИ вот так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2016, 10:26 |
|
||
|
JavaFX. Как сменить курсор в кнопке с длительным событием?
|
|||
|---|---|---|---|
|
#18+
по поводу построения визуального ГУИ. Замечательная штука для мышкоклепания формочек, но ложка дёгтя в том что она не связана с самим файлом Контроллер.java как в Delphi напр. Т.е. нет автомата при двойном клике на событии MouseClick в построителе и автоматом создании строчки кода Код: java 1. 2. Нужно каждый раз делать: - меню Сохранить - Кнопка о запросе в фокусе, но на Enter не реагирует)) - Иклипсе - обновить (тот файл с диска). ....кошмар)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2016, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=85&tid=2123583]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
15ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 280ms |

| 0 / 0 |
