У меня странная проблема. Я запускаю свою программу JavaFX, которая рисует объекты (прямоугольники, круги и т.д.) На экране с помощью команд, отправленных через сокет. При изменении системных часов назад (например, в 11:00 оно изменяется в 9:00), JavaFX не показывает результат (т.е. Созданный объект) выполненных команд, а программная логика в фоновом режиме работает и печатает сообщения в консоли для полученную и выполненную команду, но на экране ничего не отображается. Время изменяется командой:
sudo date --set 'time' && sudo hwclock --systohc
ОС - Ubuntu 16.04.4 LTS с версией ядра 3.4.39-s5p4418. Эта ОС работает на модуле Smart4418.
uname -a
вывод:
Linux 4418Module 3.4.39-s5p4418 # 1 SMP PREEMPT Пт авг 18 14:06:20 HKT 2017 armv7l armv7l armv7l GNU/Linux
Версия Java:
java-версия "1.8.0_171"
Java (TM) SE Runtime Environment (сборка 1.8.0_171-b11)
Клиентская виртуальная машина Java HotSpot (TM) (сборка 25.171-b11, смешанный режим)
Я использую JavaFX Embedded SDK, загружаемый с сайта Gluon.
Monocle.java в jfxrt.jar использует java/util/Timer.java(JDK1.8) для управления экраном.
Метод "MainLoop" в TimerThread (JDK1.8) вычисляет время выполнения с использованием "системного времени".
Если "системное время" идет назад, этот таймер замораживается.
Я исправил его, изменив Monocle.java, чтобы вызвать измененный Timer.java, и обновить их в jfxrt.jar