J2SE 1.3.0 には、新しいロボット API が組み込まれています。これは、Abstract Window Toolkit (AWT) や Swing のテストの自動化を行うために設計されたものです。ロボット API を使用すると、Java プログラミング言語で書かれたコードで、低レベルのネイティブのマウスやキーボードの入力イベントが生成できます。イベントはオペレーティングシステムレベルで生成されるため、他の AWT への実際のユーザー入力と区別することはできません。
ロボット API は主としてテストの容易性を向上させるため設計されたものですが、次のような利点もあります。
利用のしやすさ (アクセシビリティ) を考慮したアプリケーションでは、さらに多くのフィードバックが可能になります。たとえば、ユーザーが音声コマンドを使用して画面オブジェクトを操作する場合に、マウスポインタを動かして、操作中のオブジェクトを示すこともできます。
ロボット API では、コンピュータを利用したトレーニング (CBT) などのデモを行うアプリケーションが作成できます。
J2SE 1.3.0 では、印刷に対する API も改善されています。新しい印刷 API では、開発者はプラットフォーム固有の機能を使用して AWT コンポーネントから簡単に印刷できます。新しい API を使用すると、開発者は印刷ジョブのプロパティを制御することができます。制御可能なプロパティには、出力先、コピー数、ページ範囲、ページサイズ、方向、印刷の品質などがあります。
J2SE 1.3.0 では、同じアプリケーションによる複数のモニター上の GUI フレームとウィンドウのレンダリングがサポートされるようになりました。Java 2DTM API では、マルチスクリーンの次の 3 つの構成がサポートされています。
複数の独立したスクリーン
複数のスクリーンで、1 つのスクリーンが一次スクリーンとなり、他のスクリーンでは一次スクリーンに表示されているもののコピーが表示される
仮想デスクトップを形成する複数のスクリーン
J2SE 1.3.0 の新しい動的フォントロード API を使用すると、開発者は実行時に TrueType フォントの作成やロードが行えます。開発者は Java 2D API を使用して、動的にロードされたフォントに対し、サイズ、スタイル、変形などの希望する機能を与えることができます。
J2SE 1.3.0 の Java 2D API では、Portable Graphics Network (PGN) フォーマットがサポートされるようになりました。このフォーマットは、ラスターイメージを劣化することなく可搬性のある方法で保存できる、柔軟で広範囲な非独占的なファイルフォーマットです。PGN ではグレースケール、索引付きのカラー、トゥルーカラーイメージをサポートしており、アルファチャネルを利用できます。
JPDA 技術とは複層構造のデバッグアーキテクチャで、プラットフォーム、仮想マシンの実装、および J2SE バージョンの枠を超えて実行できるデバッガアプリケーションを、ツール開発者が簡単に作成できます。
JPDA には次の 3 つの層があります。
JVMDI - Java Virtual Machine Debug Interface
VM がデバッグ時に提供する必要があるデバッグサービスを定義します。
JDWP - Java Debug Wire Protocol
デバッグ中のプロセスと、Java Debug Interface を実装するデバッガフロントエンドの間で転送される、情報と要求のフォーマットを定義します。
JDI - Java Debug Interface
ツール開発者がリモートデバッガアプリケーションを書くときに、簡単に使用できる高水準の Java プログラミング言語インタフェースを定義します。
J2SE 1.3.0リリースおける国際化の向上によって、開発者は自国ユーザー向けにアプリケーションを今まで以上に柔軟にローカライズできるようになりました。ここでは、2 つの新しい機能について説明します。
入力方式とは、アプリケーションに対してテキスト入力を生成するため、キー入力や話しかけるなどのユーザーの操作を解釈するソフトウェアコンポーネントです。国際的なロケールでは、入力方式はテキストの入力に重要な役割を果たします。キーボードから直接入力できる英文テキストと異なり、日本語や中国語などの言語でのテキスト入力には、さらに高度な入力方式のフレームワークが必要となります。J2SE 1.3.0 では、開発者がそうした作業に対応するために必要となる強力なツール群が提供されています。
最新のテキスト編集コンポーネントでは、テキストが最終的に表示される文書の文脈内に、入力されたテキストが表示されます。これを「入力位置内 (on-the-spot)」入力といい、Java 2 Platform では常にサポートされてきました。
J2SE 1.3.0 では、中国などの国で好評な「入力位置下 (below-the-spot)」という、第二の入力スタイルに対するサポートが追加されています。「入力位置下」テキスト編集では、入力済みのテキストは別の編集ウィンドウに表示され、そのウィンドウはテキストの挿入位置の近くに自動的に配置されます。
開発者としては、入力方式のフレームワークの一部として表示されるウィンドウを変更したり、カスタマイズしたいと考える可能性があります。その場合、J2SE 1.3.0 では、入力方式のエンジンである Service Provider Interface (SPI) に対応する新しい API が提供されているため、開発者は自在に変更やカスタマイズができます。SPI を使用して、開発者は、ソフトウェアの必要性に応じて独自の入力方式のエンジンを作成できます。
国際ロケールに対する新たなサポートの例は他にもあります。J2SE 1.3.0 では、アラビア語やヘブライ語などのロケール用に、ツールバーやメニューバーを右から左という方向になるように、アプリケーションのフレームやダイアログボックスをレンダリングすることができます。
J2SE 1.3.0 では、Sun と協力関係にある企業との協議の結果や開発者からの要望に応えて、新たな機能がプラットフォームや Java 2 SDK ツールスイートに追加されています。拡張機能には、次のものがあります。
新しい javac コンパイラ
J2SE 1.3 では、javac コンパイラがゼロから再実装され、前回のバージョンの Java 2 SDK のコンパイラと比べて、多くのアプリケーションを高速で処理できます。
動的なプロキシクラス
J2SE 1.3 には、動的プロキシクラスに対する新しい API が組み込まれています。動的なプロキシクラスは、実行時に指定される一連のインタフェースを実装するもので、そのクラスのインタフェースを通してメソッド呼び出しはコード化され、別のオブジェクトに統一的なインタフェースを介して振り分けられます。したがって、動的プロキシクラスを使用して、一連のインタフェースに対する型安全 (type-safe) なプロキシオブジェクトが作成でき、コンパイル時ツールなどを使用してプロキシクラスを事前に生成しておく必要がありません。インタフェース API が示されたオブジェクトに対し型安全な呼び出しの反射的な振り分けを提供したい開発者にとって、動的なプロキシクラスは便利です。
たとえば動的プロキシクラスを使用して、任意のイベントリスナーインタフェースを複数実装するオブジェクトを作成し、そのイベントをログファイルに書き込むなど、一貫した方法で多種多様なイベントを処理することができます。
コレクション API の拡張
コレクション API の J2SE 1.3 バージョンが使いやすくなりました。1.3 のコレクション API には、List や Mapに対応した便利なメソッドやコピーコンストラクタが組み込まれています。
拡張 Java 基本クラス / Swing 機能
J2SE 1.3.0 の設計時には、Java 基本クラス API の Swing コンポーネントのチューニングや機能拡張に重点が置かれました。また、Swing ライブラリの性能のチューニングに加えて、いくつかの分野で新しい JFC/Swing 機能が Swing ライブラリに追加されました。一例として、軽量テーブルコンポーネントの可変的な高さの行が、新たにサポートされるようになりました。
数字ライブラリやユーティリティライブラリの改善
J2SE 1.3.0 には、同じ API を持つ数学に関連した 2 つのクラス、Math と StrictMath が組み込まれています。StrictMath は、数値演算に対してビット単位で再現可能な結果を返すものとして、その保証を必要とする開発者向けに定義されています。一方、Math クラスの実装は、指定された制約条件の中で変更されることがあり、パフォーマンスの向上を柔軟に図ることができます。パフォーマンスの向上は望んでいるが、複数のプラットフォームでビットごとの再現可能な結果は必要でないという開発者であれば、数値コードに StrictMath ではなく、Math を使用することができます。
任意精度算術演算用の J2SE API である BigInteger クラスと BigDecimal クラスでは、桁あふれを起こしたり精度が下がることがない数値演算が可能で、財務関連の計算など、さまざまな計算に不可欠な機能です。BigInteger クラスは、純粋な Java プログラミング言語コードに再実装されています。以前は、BigInteger クラスの実装は下位の C ライブラリをベースにしていました。新しい実装では、大半の標準的な演算が従来の実装より高速に実行できます。また、新しい API は新たに便利な機能が提供されており、使いやすくなっています。
新しい Timer API が Java 2 Platform に追加され、アニメーション、人間の操作に対するタイムアウト、画面上の時計とカレンダー、仕事のスケジューリングルーチン、忘備機能などがサポートされるようになりました。
仮想マシンのシャットダウンフック用の API が、java.lang.Runtime クラスに追加されています。これにより、ネットワーク接続の切断、セッション状態の保存、一時ファイルの削除など、Java プログラミング言語で書かれたアプリケーションがシャットダウンの動作を開始できるように、下位のオペレーティングシステムのプロセスシャットダウン通知機能に対し、簡単で移植性があるインタフェースが提供されています。
Zip ファイルや Jar ファイルを開くときに、新たに「終了時に削除」モードが追加され、長時間稼動しているサーバーアプリケーションは不要となった JarFile オブジェクトやデータを削除し、ディスク容量を解放できるようになりました。