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),这强烈暗示构造函数文档采用的方法。

所以我有两个问题:

  1. 如何以及为何使用MediaTracker?

  2. 有什么选择?

MediaTracker在1995年很有用。当时主要的GUI使用java是Applets,而Applets通常会在网络上缓慢加载图像。

为了让Applet编写者更容易,java为我们提供了一个很好的MediaTracker api,它可以在后台下载图像,跟踪完成时的跟踪,甚至可以在图像被部分加载时发出通知。 MediaTracker API意味着Applet编写者不必在图像缓慢下载时阻止应用程序,并且不必编写复杂的线程代码来在后台线程中加载图像。

现在,您通常可以同步加载图像,最好使用ImageIO 。 对于从本地文件系统加载图像的常见情况尤其如此。

MediaTracker

加入我们的第3个千年并使用ImageIO.read(File/URL/InputStream) 。 在我们的千禧年, MediaTracker无关紧要。