我有个奇怪的问题。我启动了我的JavaFX程序,它绘制对象(矩形、圆圈等)。在屏幕上使用通过套接字发送的命令。当向后更改系统时钟时(例如在11:00它在9:00改变),JavaFX不显示执行命令的结果(即创建的对象),后台的程序逻辑工作并在控制台中打印接收和执行的命令的消息,但是屏幕上没有显示任何内容。时间由命令改变:
sudo date --set 'time' && sudo hwclock --systohc操作系统是Ubuntu16.04.4LTS,内核版本为3.4.39.s5p4418。这个操作系统工作在Smart4418模块上。
uname -a输出:
Linux4418Module 3.4.39-s5p4418 #1 SMP抢占星期五8月18日14:06:20 HKT 2017 armv7l GNU/Linux
Java版本:
java版本"1.8.0_171“ Java(TM) SE运行时环境(build 1.8.0_171-b11) Java HotSpot(TM)客户端VM (build 25.171-b11,混合模式)
我使用JavaFX嵌入式SDK是从胶子网站下载的。
发布于 2018-09-19 07:55:59
Monocle.java in jfxrt.jar使用java/util/Timer.java( the 1.8)来管理屏幕。
方法"MainLoop“在TimerThread(JDK1.8)中使用”系统时间“计算执行时间。
如果“系统时间”倒退,这个TimerThread就会冻结。
我通过修改Monocle.java来调用修改过的Timer.java,并在jfxrt.jar中更新它们来修正它。
发布于 2019-10-17 10:34:29
在花了大量时间搜索解决方案之后,我找到了一个解决方案(我在RPi3上的Raspbian /Buster上遇到了问题,在Windows 10上一切都很好)。我在我的组件中添加了“假”动画(可以隐藏),现在UI在更改系统时间时不会冻结。只有在我找到更好的解决办法之前,这才是解决办法。
final Rotate fakeRotate = new Rotate();
backButton.getTransforms().add(fakeRotate);
fakeAnimation = new Timeline(
new KeyFrame(
Duration.hours(24),
new KeyValue(
fakeRotate.angleProperty(),
0.1,
Interpolator.LINEAR
)
)
);
fakeAnimation.setCycleCount(Animation.INDEFINITE);
fakeAnimation.play();https://stackoverflow.com/questions/51300293
复制相似问题