Thread.748的javaFX多线程并发问题

在使用JavaFX开发2D游戏时遇到卡顿及Not on java FX Application异常,通过分析疑似并发问题引起。为解决此问题,采用类似数据库的批量处理思想,创建HandleCenter类存储图形变换操作,并在单独线程中批量执行,成功避免异常。同时,为防止遍历ArrayList时的并发异常,使用局部ArrayList复制并遍历,确保遍历过程的安全性。
摘要由CSDN通过智能技术生成

最近在尝试用javafx写一个简单的2D游戏,没有仔细学过FX和多线程,就闭门造车一次。

在制作过程中,发现当移动射击等操作越来越多、主页面图形变化逐渐丰富的时候,开始出现卡顿,最后有概率地出现Not on java FX Application问题,接着出现NullPointerException导致程序崩溃。逐步排查后发现可能是并发问题,之前一直没有考虑到并发,而是简单地使用Platform.runlater(new Runnable(public void run{}))来解决Not on FX application的问题。

虽然无法确认,但是并发问题有最大的嫌疑性。

为了验证并解决问题,受数据库的启发,写了一个执行中心类(HandleCenter)

原理就是现将用数组存储起来,再进行批量依次操作。

我把每一次要进行图形变换的方法,例如

						   Platform.runLater(new Runnable() {
							   public void run() {
								   if(d.getId()==c.getId()) Main.pane.getChildren().remove(d);
							   }
						   });

直接看run的重写:在Main的pane里面直接删除Node d

解决:

把删除d的操作存储起来

PaintCenter.deleteBacth(d);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值