Java Media Framework
設計コンセプト
JMF ではメディアを DataSource （JMFへのメディア読み込みに対応）と DataSink （データのエクスポートに対応）に抽象化している。メディアフォーマットの詳細にプログラマがアクセスできるような作りにはなっていない。単にソース（URLで表す）から読み込んで、再生して、処理して、エクスポートするだけである（コーデックによっては、フォーマット変換をサポートしていない）。
アプリケーションは Manager クラスのスタティックメソッドを主に使用する。
コード例
以下のコード例は、AWTのファイル選択ダイアログであり、メディアファイルを選択するとそれをロードして再生する。
import javax.media.*;import java.io.File;import java.awt.*;
 
public class TrivialJMFPlayer extends Frame {
 
    public static void main (String[] args) {
        try {
            Frame f = new TrivialJMFPlayer();
            f.pack();
            f.setVisible (true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public TrivialJMFPlayer() 
        throws java.io.IOException,
               java.net.MalformedURLException,
               javax.media.MediaException {
        FileDialog fd = new FileDialog
            (this, "TrivialJMFPlayer", FileDialog.LOAD);
        fd.setVisible(true);
        File f = new File (fd.getDirectory(), fd.getFile());
        Player p = Manager.createRealizedPlayer
            (f.toURI().toURL());
        Component c = p.getVisualComponent();
        add (c);
        p.start();
    }}
この例の大部分は AWT GUI の構築を行っており、JMF を使っているのは2行だけである。 Manager.createRealizedPlayer() はファイルを表すURLから明示的に DataSource を作成し、Player を作成し、再生に必要なリソース割り当てと初期化を行う。getVisualComponent() は Player に対して AWT Component として使うのに適したGUIを要求する。コントロールコンポーネントが必要なら、getControlPanelComponent() で要求し、別途GUIに追加すればよい。ここではメディアのフォーマットを全く気にしていない点に注意されたい。このコードはJMFが認識できる任意のメディアフォーマットを扱える。
批判と代替手法
JMF はサポートしているコーデックが少ないと言われている。例えばJavaバージョンでは、MPEG-2、MPEG-4、RealMedia、ほとんどのQuickTimeムービー、Flash 2 以降のFlashコンテンツを再生できないし、MP3の再生にはプラグインが必要である。一方、パフォーマンスパックではプラットフォームのメディアライブラリを利用できるが、Linux と Solaris と Windows でしか提供されていない。さらに Windows 用パフォーマンスパックを使っていると、実力以上に各種フォーマットをサポートしていると思い込むことがあり、他のプラットフォームではそうではないことをアプリケーション開発後に知ることになる。
また、サンはJMFを放置しているように見える。APIが最後に修正されたのは1999年で、公式サイトの最新ニュースの日付は2004年11月である。JMFは拡張可能なように構築されているが、サードパーティによる拡張はほとんどない。さらに、JMFにはメディアの編集機能がほとんどないため、利用範囲も限られる。