首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用从非JavaFX线程在UI中使用的提取器更新JavaFX ObservableList

JavaFX是一个用于构建富客户端应用程序的开发框架,它提供了丰富的图形界面组件和功能。ObservableList是JavaFX中的一个集合类,它实现了List接口,并且可以监听其中元素的变化。

在JavaFX中,UI更新必须在JavaFX应用程序线程(也称为UI线程)中进行,而非JavaFX线程不能直接更新UI。为了在非JavaFX线程中更新JavaFX ObservableList,我们可以使用提取器(Extractor)来实现。

提取器是一个函数式接口,它定义了一个从对象中提取值的方法。在这种情况下,我们可以使用提取器来从非JavaFX线程中提取需要更新的值,并将其添加到ObservableList中。

以下是一个示例代码,演示了如何使用提取器在非JavaFX线程中更新JavaFX ObservableList:

代码语言:txt
复制
import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.stage.Stage;

public class Main extends Application {

    private ObservableList<String> dataList;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        // 初始化ObservableList
        dataList = FXCollections.observableArrayList();

        // 创建一个后台任务
        Task<Void> backgroundTask = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                // 模拟耗时操作
                Thread.sleep(2000);

                // 从非JavaFX线程中更新ObservableList
                Platform.runLater(() -> {
                    dataList.add("New Item");
                });

                return null;
            }
        };

        // 启动后台任务
        new Thread(backgroundTask).start();

        // 在UI线程中监听ObservableList的变化
        dataList.addListener((observable, oldValue, newValue) -> {
            System.out.println("ObservableList changed: " + newValue);
        });
    }
}

在上述代码中,我们首先创建了一个ObservableList对象,然后创建了一个后台任务(Task),在该任务中模拟了一个耗时操作,并使用Platform.runLater()方法将更新操作放在JavaFX应用程序线程中执行。最后,我们在UI线程中监听ObservableList的变化,并在控制台输出变化的内容。

这是一个简单的示例,展示了如何使用提取器在非JavaFX线程中更新JavaFX ObservableList。在实际应用中,您可以根据具体需求进行扩展和优化。

腾讯云提供了丰富的云计算产品和服务,包括云服务器、云数据库、云存储等,您可以根据具体需求选择适合的产品。具体的产品介绍和使用方法可以参考腾讯云官方文档:腾讯云产品文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Using JavaFX UI Controls 12 Table View

很多JavaFX SDK API种类为表格表单呈现数据。JavaFX 应用对创建表格最重要是TableView, TableColumn和TableCell这三个类。...例子 12-1, 表格组件被添加到 VBox  布局容器,然而你也可以直接将其添加到应用场景。 例子 12-1定义了3列将用来存放地址簿信息:一个联系人 姓和名以及电子邮箱地址。...单元工程通过使用PropertyValueFactory类来实现, 表格列firstName, lastName和email 属性来引用Person相应属性 。...因为ObservableList 对象能够跟踪表格元素任何变化,当其中数据变化,TableView 内容也自动更新。...将Map数据添加到表格 JavaFX SDK 2.2开始,你可以往表格添加Map类型数据。

11.3K20

JavaFX 11发行说明

已知问题 JavaFXUbuntu 18.04上使用Wayland与OpenJDK 11崩溃 启用XWayland窗口服务时,JavaFXUbuntu 18.04 Linux机器上崩溃。...只要FX窗口工具包代码Linux上使用GTK 3,就会发生这种情况,这是JavaFX 11默认设置。 建议解决方法是在运行JavaFX应用程序时使用Xorg服务而不是Wayland服务。...JDK-8195799 javafx模块中使用系统记录而不是平台记录 其他 JDK-8195800 消除对javafx模块sun.reflect.misc依赖 其他 JDK-8195974...将javafxjava.util.logging替换为System logger 其他 JDK-8196297 删除过时JFR记录代码 其他 JDK-8199357 FX删除对applet和Java...[MacOS] JavaFX主窗口无法MacOS全屏模式返回 窗口工具包 JDK-8196031 FX Robot mouseMoveWindows 10 1709上使用HiDPI失败 窗口工具包

6.5K60

JavaFX-TableView详解

前言 最近在着手一个学生管理系统编写,涉及到TableView使用,这前前后后也有了些经验和想法想要记录和分享一下(事实上我正在想要用html网页代替界面),更多是学习之用。...先看看TableView中有些什么 IDEA,按住Ctrl然后点中TableView关键字会自动跟进到它定义地方,我们可以先看看这里面到底都有些什么东西。.../blog/2015/04/doc03_tableview/ 官方文档:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm TableView...增加列,删除列 这就不仅仅要删除集合数据,还要从表格里面的Columns集合删除相应数据才可以,或许你还会在删除和增加中加入一定判断来保证操作正确性: table.getColumns()....,通过getProperties().addListener来完成监听,同样也可以添加进一个ListChangeListener: // 给table设置监听监听列变化 table.getColumns

3.3K60

JavaFX WebView概述,很强大,内置了类似Electron功能

JavaFX主要功能: WebView:一个Web组件,使用WebKit HTML技术可以将网页嵌入JavaFX应用程序。...JavaFX WebView: JavaFX WebView  是一个微型浏览(也称为嵌入式浏览),它通过JavaFX  应用程序API提供Web查看和完整浏览功能  。...WebView对象上调用getEngine()方法将返回与其关联Web引擎。 构成嵌入式浏览类位于javafx.scene.web包。...支持以本国语言编写域名 下图描述了嵌入式浏览体系结构及其与其他JavaFX关系: 网络引擎: 是一种可视对象,能够一次管理一个网页 通过其API提供基本网页功能。...要跟踪进度和/或取消作业,我们可以使用getLoadWorker()  方法 可用  Worker实例  。 以下示例成功完成加载时更改阶段标题: 5.

9.9K41

Java 近期新闻:JDK 20JEP提升为Targeted状态,亚马逊云科技推出Lambda SnapStart特性

这优于线程局部变量,尤其是使用大量虚拟线程时。 JEP 436,虚拟线程(第二次预览),已从 JDK 20 Candidate 状态提升为建议 Proposed to Target 状态。...JEP 437,结构化并发(第二个孵化), JDK 20 Candidate 状态提升为 Proposed to Target 状态。...该 JEP 也是 Loom 项目的支持下,提议基于 JDK 19 中提供 JEP 428,结构化并发(孵化重新孵化该特性,以便有时间提供更多反馈和经验。...JavaFX 专为使用 JDK 20 早期访问构建版本而设计,应用程序开发人员可以 JDK 20 上使用 JavaFX 20 构建和测试其应用程序。...Quarkus 红帽(Red Hat)发布了 Quarkus 2.14.2 和 2.13.5 版本,主要修复了 CVE-2022-4116 漏洞,CVE-2022-4116 是 Dev UI 配置编辑一个漏洞

1.4K20

Using JavaFX UI Controls 18 超链接

原网页地址:http://docs.oracle.com/javafx/2/ui_controls/hyperlink.htm#CIHGADBG 这一章讲述用来将文本转换为超链接 Hyperlink...链接本地内容 图18-2展示应用本地目录渲染图片 图 18-2 显示图片 展示例 18-2源代码: 例 18-2利用超链接浏览图片 import javafx.application.Application...下一节程序将展示既使用标题也使用图片来创建超链接和加载远程html页面。 链接远程内容 在你JavaFx程序,通过嵌入WebView 浏览组件来渲染 HTML内容。...当点击其中一个超链接时,对应值作为URL传给镶嵌浏览。...为超链接设置行为传递给urls数组对应URL地址给嵌套在浏览WebEngine 对象。 当编译运行此程序,程序窗体将显示如图18-4状况。 图18-4 Oracle 公司网址加载页面

1.5K50

JavaFX 11 发布,与 JDK 拆分后首个正式大版

由于 JavaFX 库被写成了 Java API,因此 JavaFX 应用程序代码可以调用各种 Java 库 API,例如 JavaFX 应用程序可以使用 Java API 库来访问本地系统功能并且连接到基于服务中间件应用程序...此次更新主要内容如下: 重要更新JavaFX 模块指定:因为 JDK 不再包含 JavaFX,那么必须明确包含应用程序使用 JavaFX 模块,详情见:https://openjfx.io/openjfx-docs... JavaFX 11 修改值步骤之前,必须在 Spinner 控件箭头按钮上按下鼠标一段默认持续时间,JavaFX 11 已添加两个新属性“initialDelay”和“repeatDelay”来配置此操作...想要在启用安全管理情况下运行应用程序需要使用“-Djava.security.policy”指定自定义策略文件,并为每个 javafx.* 模块授予所有权限。...默认 GTK 版本 v2 更新为 v3。将在存在 gtk3 库 Linux 平台上使用 GTK 3。

2.2K40

JAVAFX(一) java Module 模块化简介

这样使用者就不需要再单独安装jdk/jre了, 加上java9之后javamodule化, 可以最大程度上精简jre, 虽然是精简了,但实际上,大家可以看到, 每次我群里面发包,还是接近100MB...了. javaFX java身为一个跨平台语言,我们对其更多直观感受是win/mac 上写了一个springboot程序, 然后丢到win/linux服务上去运行....用上面用jpackage打包之后应用, 不同平台上打的包, 可以不同平台上运行. 虽然UI/字符显示上会有些许差别,但是差别不怎么大. 可以通过接口-不同平台实现类方式进行处理....踩想砸电脑.....) java Module 模块化和模块化区别,代码体现上就是module-info.java区别 ?...: 我们这个模块(模块名: red.lixiang.tools.sunflower) 需要javafx.controls和javafx.fxml模块 opens: 主要是反射使用,javafx.fxml

2.2K10

第68篇:javafx编写扫描UI界面的线程死锁问题及坑点总结

Part2 技术研究过程 扫描设计思路 我想实现如下功能:burpsuite抓到一个数据包之后,点击右键弹出菜单,将指定扫描任务发送到服务端“扫描任务队列”去进行扫描,与服务端通信是通过socket...坑1:多线程添加一个Tab标签直接报错 刚开始用多线程操作javafx控件就遇到了一个报错,向图形界面添加一个图形控件时,报错提示“Not on FX application thread; currentThread...2 Platform.runLater不用,ReentrantLock锁使用 首先看这种情况,运行后马上各种报错,说明ReentrantLock锁无法保证javafx控件线程安全问题。...但是实测结果,经常在如下代码,出现报错问题,导致程序崩溃,所有扫描任务停止。 这是一个隐藏非常深线程安全bug,一天中会不定时出现几次,而且没办法复现,让我大伤脑筋。...首先使用idea 2022新建项目,JDK选择大于等于jdk8版本即可,小于jdk8不支持javafx。 可以看到idea 2022版本,已经自动pom.xml文件添加了javafx库了。

26131

IntelliJ IDEA 2021.2 正式发布了!

编辑 检查和快速修复描述更加全面,其中一些描述还提供了使用示例 增强了图表信息量 项目的版权声明默认包含创建年份和当前版本年份 改进了Markdown 支持,可以将 .md 文件转换为各种格式...用户体验 您可以直接欢迎屏幕上专用文件夹打开存储您机器上本地 Eclipse 项目,因为 IntelliJ IDEA 现在可以自动检测这类项目 自动清除最后更新超过180 天所有缓存和日志目录...如果你项目针对某个框架缺少特定插件,IDE会提醒你启用它 IDE将通知您任何出现咋Toolbox App 1.20.8804或更高版本产品更新信息 在这个版本,我们消除了使用上下文菜单、弹出窗口和工具栏时出现...UI 块,并移除了某些需要从 UI 线程提取索引操作 当你浏览预览 HTML 文件时,IDE 会自动显示 HTML 文件或链接 CSS 和 JavaScript 文件中所做任何保存更改...| Color Scheme 新两步式创建 JavaFX 项目的向导 增加了一系列新检查来处理数据流分析特定用例,包括跟踪浮点范围或更新方法集合大小等 版本控制 现在可以提交应用更改之前对它们运行测试

75110

JavaFX 简介

这个程序其实也没什么难点,就是使用了网格布局,然后将每个元素添加到网格。关于网格布局属性意义可以参考官方图。 ?...FXML中用fx:id属性指定ID,可以控制声明为一个类字段,通过这个字段就可以和界面组件进行交互。同样道理,onAction声明事件处理程序,控制中就是一个方法。...主程序需要使用FXMLLoader来加载FXML资源,其他部分没有太大变化。...如果希望修改组件样式,JavaFX提供了CSS接口,让我们可以直接使用CSS文件修改样式。首先需要在FXML文件添加相应样式表引用。文件名前面的@表示这个CSS文件和FXML文件同一目录下。...#btnShowPassword { -fx-background-color: deeppink; } 上面用了ID选择,所以对应地,FXML也需要ID属性。

5.6K70

前端框架你究竟选什么

熟悉Java AWT开发者不需要花费多大力气就能够快速理解GWT开发工具包,将更多地时间投入到GWT应用开发过程。...使用授权为 BSD许可证,基本上没怎么研究过! ? YUI Compressor倒是挺出名,这套UI库不知道应用情况怎么样!...在线demo ? 设计demo ? 日历组件 ? 功能丰富,全面,文档齐全,而且升级了很多次,非常值得推荐!...12、OperaMasks-UI OperaMasks-UI是OperaMasks团队 2011下半年打造一款轻量级前端JS组件库,旨在提供一款学习曲线低、定制性灵活、样式统一,且多浏览支持、覆盖企业业务场景前端...13、JavaFX Sun公司(已于2009年被Oracle公司收购)2008年12月05日发布了JavaFX技术正式版,它使您能利用 JavaFX 编程语言开发富互联网应用程序(RIA)。

2.3K61

Java FX制作小游戏

Java FX制作小游戏全栈学习Java,了解如何使用Java FX创建图形化界面是很重要一步。本篇文章将向您展示如何使用Java FX制作一个简单小游戏。...按照以下步骤:打开您IDE,并创建一个新Java项目。项目配置,选择Java FX作为项目的库和框架。创建一个主类 Main ,它将成为我们游戏入口点。...,我们可以 handle 方法处理按键按下和按键释放逻辑。...应用程序必须继承Application类,并实现其start方法,该方法初始化应用界面和设置应用主舞台。...Node可以设置位置、大小、样式和事件处理,可以通过父子关系构建复杂UI层次结构。Layout:JavaFX提供了多种布局类,用于定义和管理组件位置和大小。

16410

ApacheCN Java 译文集 20211012 更新

考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. 使用私有构造执行实例化 5....Java 8 API 示例:字符串、数值、算术和文件 Java 8 避免 Null 检查 使用 Intellij IDEA 解决 Java 8 数据流问题 Nashron 中使用 Backbone.js...基础知识 零、序言 一、JavaFX 8 入门 二、JavaFX 8 基础和创建自定义 UI 三、开发 JavaFX 桌面和 Web 应用 四、为 Android 开发 JavaFX 应用 五、为...iOS 开发 JavaFX 应用 六、 Raspberry Pi 上运行 JavaFX 应用 七、使用 JavaFX 监控 Arduino 八、使用 JavaFX 交互式 Leap Motion 应用...九、文件输入和输出 十、基本图形用户界面开发 十一、XML 精通 Java8 并发编程 零、序言 一、第一步——并发设计原则 二、管理大量线程——执行 三、最大程度利用执行 四、任务获取数据——

2.5K10

使用Maven构建JavaFX程序(HelloWorld示例)

如何使用Maven构建JavaFX程序呢?下面给出一个简单示例! 本工程包含一个main入口函数类,一个controller类,资源文件包括一个fxml文件,一个css样式文件。...源码目录下新建resources文件夹,然后该文件夹下面新建Main.fxml文件和application.css文件。FXML文件用于描述界面布局,CSS文件用于设置UI样式。...如果资源文件放置resources目录下面的和源码文件带包目录类似的目录下面,即如果放置resources/cn/tzy/目录下面的话,则获取资源方式应该是:getClass().getResource...大家可以通过观察编译以后目录中文件位置进行测试和实践。 Main.fxml 这个文件只有一个Button按钮 <?...onAction属性通过“#处理函数名”方式将Controller事件处理函数绑定到UI控件上。

8.5K20

DJ 风格 Java 桌面音乐播放

使用 Idea 自带 Maven 构建工具,就可以将项目轻松打包。如下图: ?...三、音乐播放器使用 项目运行起来长这样子,如下图: ? 1、需要创建一个用户,点击登录就可以进入音乐播放管理页面。 ? 2、进入音乐播放,需要创建自己音乐播放列表,并导入本地音乐。 ?... JavaFX ,Stage 是应用程序窗口,其中包含称为 Scene 空间。Scene 包含界面的组件,如 UI 空间(按钮,输入框,复选框),容器等。...上面代码意思是:创建一个面板,然后面板上添加标签,输入框和按钮,并对按钮添加绑定事件,然后把这个面板添加到场景,这个窗口就完成了。 五、最后 Java 桌面 DJ 音乐播放是真的香!...不知道你对这款音乐播放有什么感受,欢迎评论区说说自己想法。人们都喜欢美的好事物,而今天这个项目是通过 Java 代码撸出来,难道你还不会不喜欢 Java 这门编程语言吗?

3.7K20
领券