javaFX 关于动态改变Label内容的实现方式,实现动态展示内容效果

如果你试图在自己创建的线程里面,动态改变控件的状态或者内容,例如下面的代码:

Task worker = createWorker();
Thread thread = new Thread(worker);
thread.start();

private Task createWorker() {
	Task worker = new Task() {
		@Override
        protected Object call() {
			// 改变label的内容
		    remainderLabel.setText("动态内容");
		    // 或者改变控件的可见性
		    hBox2.setVisible(false);
		}
	};
    return worker;
}

后台会报如下的错误:
Java FX: java.lang.IllegalStateException: Not on FX application thread
原因如下:
当运行javaFX程序时,系统会自动创建一个FX application thread线程,用于更新界面的组件信息,当我们想运用多线程实现业务,而自己创建的线程又直接导致了界面组件信息的更新时,控制台就会抛出java.lang.IllegalStateException异常。
这时候要怎么实现才是正确的呢,可以在任务监听里面实现动态修改内容的逻辑,完整代码如下:

private Task createWorker() {
	Task worker = new Task() {
		@Override
        protected Object call() {
        	// 这个方法的值会传递给下面的监听方法里
			updateMessage("动态内容message");
		}
	};
	worker.messageProperty().addListener((observable, oldValue, newValue) -> {
		String message = worker.getMessage();
		// 这里动态改变label的内容
	    remainderLabel.setText(message);
	    // 或者改变控件的可见性等
	    hBox2.setVisible(false);
	});
    return worker;
}
Task worker = createWorker();
Thread thread = new Thread(worker);
thread.start();

这样就可以在自己创建的异步线程里面动态修改javaFX控件的内容或者状态等,这些都是自己平时开发过程中遇到的问题,总结下来的经验,最后给大家看看视频效果。(这是我自己制作的一个桌面小工具,提醒自己定时休息,程序员要爱护好自己的脖子和腰)

用javaFX自制的一个桌面小工具,提醒自己定时休息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新之助Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值