MediaTracker – 如何使用它,有什么好处,还是有替代品?
在代码库中,我们inheritance了MediaTracker的用法总是在每个代码块中本地完成。
new MediaTracker(new Canvas()); mediatracker.addImage(i, 1); try { mediatracker.waitForAll(); } catch (InterruptedException e) { } mediatracker.removeImage(i);
决定这是低效的,我最终用静态实例和方法替换它:
final static protected MediaTracker mediatracker = new MediaTracker(new Canvas()); static protected void checkImageIsReady(Image i) { mediatracker.addImage(i, 1); try { mediatracker.waitForAll(); } catch (InterruptedException e) { } mediatracker.removeImage(i); }
到目前为止,没有任何不良影响。
还有另一种可能的方法 – 将MediaTracker附加到每个组件(通常是Frame或JFrame),这强烈暗示构造函数文档采用的方法。
所以我有两个问题:
-
如何以及为何使用MediaTracker?
-
有什么选择?
MediaTracker在1995年很有用。当时主要的GUI使用java是Applets,而Applets通常会在网络上缓慢加载图像。
为了让Applet编写者更容易,java为我们提供了一个很好的MediaTracker api,它可以在后台下载图像,跟踪完成时的跟踪,甚至可以在图像被部分加载时发出通知。 MediaTracker API意味着Applet编写者不必在图像缓慢下载时阻止应用程序,并且不必编写复杂的线程代码来在后台线程中加载图像。
现在,您通常可以同步加载图像,最好使用ImageIO 。 对于从本地文件系统加载图像的常见情况尤其如此。
MediaTracker
?
加入我们的第3个千年并使用ImageIO.read(File/URL/InputStream)
。 在我们的千禧年, MediaTracker
无关紧要。