Vector删除,MidiaTracker的使用

本文首先探讨了在多线程环境下使用Vector删除元素时遇到的ConcurrentModificationException异常,并给出了解决方案。随后介绍了MediaTracker类的基本用法,包括如何添加、移除图像以及检查图像加载状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Vector删除元素

       在删除集合中的元素时,我习惯使用 collection.remove( obj ) 这种形式来删除,当删除一个元素时并不会发生什么问题,但如果是在多线程程序中删除则经常会抛出一些异常:ConcurrentModifactionException

      例:

for( Bullet bullet : bullets ){
			bullet.move();
			
			if( !bullet.isDiscard ){
				bullets.remove( bullet );
			}
		}
       或:

for( int i=0; i<bullets.size(); i++ ){
			Bullet bullet = bullets.get( i );
			bullet.move();
			if( bullet.isDiscard ){
				bullets.remove( i );
			}
		}

        我解决这个异常的方法是使用迭代,如下:

public synchronized void move( int ex ){
		Iterator<Bullet> it = bullets.iterator();
		
		while( it.hasNext() ){
			Bullet bullet = it.next();
			bullet.move();
			
			if( bullet.isDiscard ){
				it.remove();
			}
		}
	}

2. MediaTracker的用法

        跟踪多媒体对象状态的实用工具类,媒体对象包括音频剪辑和图像,但目前只支持图片

       addImage( int id )                                                                           向此媒体跟踪器正在跟踪的列表添加一个图像

       addImage( int id, int width, height )                                           

       cheakAll()                                                                                         查看此媒体跟踪器正在跟踪的所有图像是否已完成加载。

       checkID()                                                                                          检查由此媒体跟踪器跟踪且使用指定标识符标记的所有图像是否已完成加载

       removeImage( image )                                                                  从此媒体跟踪器移除指定的图像。

      waitForAll()                                                                                        开始加载由此媒体跟踪器跟踪的所有图像。

      waitForId()                                                                                         开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值