当前位置: 首页 > news >正文

定时器更新界面,线程报错

项目场景:

在javafx框架下使用线程更新UI的时候,出现无法正常更新UI。

问题代码如下:

package clock;import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.stage.Stage;public class SimpleClock extends Application{public static void main(String[] args) {Application.launch();}public void start(Stage stage) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {init(stage);});}}, 0, 1000); }private void init(Stage stage){Calendar calendar = new GregorianCalendar();int hour = calendar.get(Calendar.HOUR_OF_DAY);int minute = calendar.get(Calendar.MINUTE);int second = calendar.get(Calendar.SECOND);ClockPane cPane = new ClockPane(hour, minute, second);Scene scene = new Scene(cPane, 300, 300);stage.setTitle("Watch");stage.setScene(scene);stage.show();}}

问题描述

运行程序之后,出现如下报错:

Exception in thread "Timer-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = Timer-0at javafx.graphics@22.0.1/com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:294)at javafx.graphics@22.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:481)at javafx.graphics@22.0.1/javafx.stage.Stage.setScene(Stage.java:269)at clock.SimpleClock.init(SimpleClock.java:34)at clock.SimpleClock$1.run(SimpleClock.java:23)at java.base/java.util.TimerThread.mainLoop(Timer.java:571)at java.base/java.util.TimerThread.run(Timer.java:521)

原因分析:

checkFxUserThread

从出错日志看出checkFxUserThread这个方法在检查用户进程是否为UI线程,如果不是会抛出异常,这是因为为了使UI渲染不出现阻塞现象,不允许在子线程中进行UI操作。


解决方案:

可以使用javafx框架提供的runlater方法,实现切换到UI线程来执行更新UI的操作。

    public void start(Stage stage) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {Platform.runLater(new Runnable() {@Overridepublic void run() {init(stage);}});}}, 0, 1000); }

相关文章:

定时器更新界面,线程报错

项目场景: 在javafx框架下使用线程更新UI的时候,出现无法正常更新UI。 问题代码如下: package clock;import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask;import javaf…...

未来AI大模型的发展趋势

大家好,我是小悟 未来AI大模型的发展趋势无疑将是多元化、高效化、普及化以及人性化。随着技术的飞速进步,AI大模型将在各个领域中展现出更加广泛和深入的应用,成为推动社会进步的重要力量。 多元化是AI大模型发展的重要方向。随着数据量的…...

【JavaScript函数详解】Day04

JavaScript函数详解 JavaScript 基础 - 第4天笔记函数声明和调用声明(定义)调用 参数形参和实参参数默认值 返回值函数补充细节作用域全局作用域局部作用域变量的访问原则 匿名函数函数表达式立即执行函数 逻辑中断小知识(转换为Boolean型&am…...

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串,响应是json字符串 响应的数据是…...

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能,Smart Home Skill Apis时,有一个配置的JSON字符串是这样的: { "capabilityResources": {"friendlyNames": [{"type": "asset",…...

老旧机子装linux——Xubuntu

目录 前言 正文 下载系统 ​编辑 制作系统盘: 安装界面 Xubuntu ​编辑 lubuntu 后语 前言 有两台电脑,一台装了Ubuntu22,一台装了debuntu。虽然debuntu界面与乌班图大体一样,但是编译器好像有点区别。由于机子为10年前的老…...

关于Redis中事务

事务的四个特性 Redis到底有没有原子性 Redis中的原子性不同于MySQL,相比于MySQL,Redis中的原子性几乎不值一提。 MySQL中的原子性,不仅仅是“要么全都执行,要么全都不执行”,它还保证了“一旦执行,结果…...

【数据分享】《中国文化文物与旅游统计年鉴》2022

最近老有同学过来询问《中国旅游年鉴》、《中国文化文物统计年鉴》、《中国文化和旅游统计年鉴》、《中国文化文物与旅游统计年鉴》,这四本年年鉴的关系以及怎么获取这四本年鉴。今天就在这里给大家分享一下这四本年鉴的具体情况。 实际上2018年,为适应…...

设计模式及其在软件开发中的应用

一、技术难点 设计模式在软件开发中扮演着至关重要的角色,但它们的应用也伴随着一系列技术难点。 模式选择与识别:在实际项目中,正确识别和选择合适的设计模式是一个挑战。不同的设计模式适用于不同的场景,错误的选择可能导致系统…...

LeetCode72编辑距离

题目描述 解析 一般这种给出两个字符串的动态规划问题都是维护一个二维数组,尺寸和这两个字符串的长度相等,用二维做完了后可以尝试优化空间。这一题其实挺类似1143这题的,只不过相比1143的一种方式,变成了三种方式,就…...

竞拍商城系统源码后端PHP+前端UNIAPP

下载地址:竞拍商城系统源码后端PHP前端UNIAPP...

千益畅行,共享旅游卡,灵活同行,畅游无忧的全方位解析

千益畅行,共享旅游卡,满足您多样化的同行出行需求 近期,关于千益畅行共享旅游卡的咨询热度不减,尤其是关于其同行人数的限制问题。为了给大家一个清晰的解答,我们深入探讨了该旅游卡的特点和优势。 千益畅行共享旅游…...

Web IDE 在线编辑器综合实践(Web IDE 技术探索 三)

前言 前面两篇文章,我们简单讲述了 WebContainer/api 、Terminal 的基本使用,离完备的在线代码编辑器就差一个代码编辑了。今天通过 monaco editor ,来实现初级代码编辑功能,讲述的是整个应用的搭建,并不单独针对monac…...

Less is more VS 精一 [生活感悟]

"Less is More”和王阳明的“精一”思想确实有相似之处。 王阳明的“精一”思想强调的是专注于一件事,将其做到极致,这与"Less is More”中提倡的通过减少数量来提高质量的理念不谋而合。两者都强调了专注和深度的重要性,而不是追…...

函数的概念及图像

注: 判断两函数是否相同,只看定义域和对应法则。 1. 函数的定义 一般的,在一个变化过程中有两个变量 x,y。如果对于x在某个变化范围内的每一个确定值,按照某个对应法则,都有唯一确定的值y和他对应。那么y就…...

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年6月3日11点44分 🀄️文章质量:95分 为了更好地控制对网站资源的访问,可…...

滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南

滚动条是用户界面中的图形化组件,用于指示和控制内容区域的可滚动范围。当元素内容超出其视窗边界时,滚动条提供可视化线索,并允许用户通过鼠标滚轮、触屏滑动或直接拖动滑块来浏览未显示部分,实现内容的上下或左右滚动。它在保持…...

06 Linux 设备驱动模型

1、Overview Linux-2.6 引入的新的设备管理机制 - kobject 降低设备多样性带来的 Linux 驱动开发的复杂度,以及设备热拔插处理、电源管理等将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口驱动的开发,就简化为对内核所规定的数据结构的填充和实现驱动模型是 Linu…...

检测五个数是否一样的算法

目录 算法算法的输出与打印效果输出输入1输入2 打印打印1打印2 算法的流程图总结 算法 int main() {int arr[5] { 0 };int i 0;int ia 0;for (i 0; i < 5; i) { scanf("%d", &arr[i]); }for (i 1; i < 5; i) {if (arr[0] ! arr[i]) {ia 1;break;} }…...

java 原生http服务器 测试JS前端ajax访问实现跨域传post数据

后端 java eclipse 字节流转字符 package Httpv3;import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;import java.io.IOException; import java.i…...

lychee-rerank-mm与PyTorch集成:构建自定义多模态模型

lychee-rerank-mm与PyTorch集成&#xff1a;构建自定义多模态模型 1. 引言 多模态AI正在改变我们处理信息的方式&#xff0c;但如何让模型真正理解图文之间的复杂关系&#xff0c;一直是个技术难点。想象一下这样的场景&#xff1a;你的电商平台需要将用户上传的商品图片与海…...

Dify + Weaviate/Qdrant混合重排架构实践(支持动态权重调度、Fallback降级与A/B测试埋点)

第一章&#xff1a;Dify重排序架构的核心设计哲学Dify 的重排序&#xff08;Reranking&#xff09;模块并非简单叠加于检索之后的后处理步骤&#xff0c;而是在整个 LLM 应用生命周期中承担语义对齐、意图强化与可信度校准三重使命的设计原语。其核心哲学可凝练为&#xff1a;*…...

锁明明还没过期,为什么另一个线程能抢进去?

做分布式开发的时候&#xff0c;大家对 Redis 分布式锁应该都不陌生。为了防止锁死&#xff0c;比如服务器突然断电&#xff0c;锁永远不释放&#xff0c;我们通常都会给锁加一个过期时间&#xff08;TTL&#xff09;。写代码的时候&#xff0c;我们心里的算盘是这样打的&#…...

如何解决多显示器DPI缩放混乱?SetDPI工具实战指南

如何解决多显示器DPI缩放混乱&#xff1f;SetDPI工具实战指南 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 在现代办公环境中&#xff0c;多显示器配置已成为提升工作效率的标准方案。然而&#xff0c;当你将4K显示器与1080P显示器组合…...

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速:面向边缘设备的部署探索

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速&#xff1a;面向边缘设备的部署探索 1. 引言 想象一下&#xff0c;你手里有一台小巧的Jetson Nano开发板&#xff0c;想让它实时识别人脸&#xff0c;完成门禁或者客流统计。你兴冲冲地找到了一个效果不错的模…...

告别手动复制!用Apifox Helper插件实现IDEA代码注释自动同步API文档(2024最新版)

2024终极指南&#xff1a;用Apifox Helper打造无缝API文档同步工作流 在当今快节奏的开发环境中&#xff0c;API文档与代码的同步问题一直是困扰开发团队的痛点。传统的手动维护方式不仅耗时耗力&#xff0c;还容易因人为疏忽导致文档与实现不一致。想象一下&#xff0c;当你在…...

PX4无人机仿真入门:XTDrone平台从安装到自定义机型的完整指南

PX4无人机仿真入门&#xff1a;XTDrone平台从安装到自定义机型的完整指南 无人机仿真技术已成为现代航空研发的重要工具&#xff0c;而PX4作为开源飞控系统的代表&#xff0c;配合XTDrone仿真平台&#xff0c;为开发者提供了高效、安全的测试环境。本文将带您从零开始&#xff…...

告别DLL!用C#和AllenBradley.Core库直接读写罗克韦尔PLC数据(附完整通信代码)

告别DLL&#xff01;用C#和AllenBradley.Core库直接读写罗克韦尔PLC数据 在工业自动化领域&#xff0c;与PLC的高效通信一直是开发者面临的挑战。传统方式往往依赖第三方DLL或OPC中间件&#xff0c;不仅增加了系统复杂性&#xff0c;还可能导致性能瓶颈和稳定性问题。本文将介绍…...

DL00592-基于无监督学习的绝缘子缺陷检测完整实现‘含数据集目录结构

DL00592-基于无监督学习的绝缘子缺陷检测完整实现含数据集 data |---- insulator |-----|------ ground_truth |-----|------|------ teat_all |-----|------|------ test_real |-----|------|------ test_sim |-----|------ test_all |-----|------|------ good |-----|------…...

30分钟搭建:OpenClaw与Qwen3-32B镜像的钉钉机器人

30分钟搭建&#xff1a;OpenClaw与Qwen3-32B镜像的钉钉机器人 1. 为什么选择这个组合&#xff1f; 上周三凌晨2点&#xff0c;我被运维报警短信吵醒——服务器磁盘空间不足。睡眼惺忪地用手机SSH连服务器查日志时&#xff0c;突然想到&#xff1a;如果能让钉钉机器人直接帮我…...