|
J2SETM 1.4 Beta 2 での変更点 |
![]() |
AWT
Java 2D
Java Platform Debugger Architecture
Java 印刷サービス
Java Web Start
Image I/O
Swing
VM
国際化
ログ機能
セキュリティ
ネットワーク機能
Java RMI
ツール
Accessibility
非推奨となったフォーカス関連メソッド
この変更に関する bugtraq レポート: 4476300
このリリースで採用された新規フォーカスサブシステムでは、複雑な AWT および Swing アプリケーション内でキーボードフォーカスを処理するための、新たなアーキテクチャおよび用語が導入されました。 このプロジェクト以前においては、多数のフォーカス関連 API の使用方法および用語が一貫しておらず、ドキュメント化も適切に行われていなかったため、設計された UI の質はよくありませんでした。 新たなアーキテクチャの採用により、これらの API の中で特に標準からはずれたものが推奨されなくなりました。
推奨されなくなった定数およびメソッドを、以下に示します。
javax.swing.FocusManager.FOCUS_MANAGER_CLASS_PROPERTYjavax.swing.FocusManager.disableSwingFocusManager()javax.swing.FocusManager.isFocusManagerEnabled()javax.swing.JComponent.requestDefaultFocus()javax.swing.JComponent.isManagingFocus()javax.swing.JComponent.setNextFocusableComponent(Component)javax.swing.JComponent.getNextFocusableComponent()java.awt.Component.isFocusTraversable()java.awt.Component.hasFocus()javax.swing.SwingUtilities.findFocusOwner(Component)タイムスタンプが必要になった ActionEvents (および他のイベント)
この変更に関する bugtraq レポート: 4434193
新たなフォーカスアーキテクチャには、フォーカスの転送を開始する
KeyEventに続くKeyEventが、転送が完了するまでは送信されないことを保証する先行入力機構が含まれます。 この機能の設計は、さまざまなイベントの UTC タイムスタンプに基づいています。 開始イベント以降のタイムスタンプを保持するイベントは、転送を保留にし、キューに格納されます。開始イベント以前のタイムスタンプを保持するイベントは、キューには格納されません。この機能を実装するため、フォーカスコードは処理中のイベントのタイムスタンプを追跡します。 この処理中にフォーカスの変更が開始されると、タイムスタンプが使用可能になります。 ただし、現行のイベントがタイムスタンプを保持しない場合には、現行のシステム時刻が使用されます。 通常、この時刻は、イベントが実際に発生した時刻よりもずっと後なので、実際は使いものになりません。 このため、先行入力機構は失敗し、フォーカスの転送が完了する前に
KeyEventが送信されてしまいます。この問題の発生するもっとも一般的なケースとして、
ActionEventを挙げることができます。ActionEventは、基盤となるInputEventに応答して生成される高度な意味上のイベントです。InputEventは自らに関連付けられたタイムスタンプを保持しますが、ActionEventはそうではありません。 このため、ActionEventAPI が拡張されて、タイムスタンプに対応するようになりました。また、実装も更新され、ActionEventのタイムスタンプと基盤となるInputEventのタイムスタンプが等しくなります。次のメソッドが、
ActionEventに追加されました。次の
ActionEventメソッドが変更されました。
ActionEvent(Object source, int id, String command)ActionEvent(Object source, int id, String command, int modifiers)
getWhenメソッドがInvocationEventに追加されました。
InvocationEventのコンストラクタInvocationEvent(Object, Runnable)およびInvocationEvent(Object, Runnable, Object, boolean)が変更されました。新規コンストラクタ
InputMethodEvent(Component, int, long, AttributedCharacterIterator, int, TextHitInfo, TextHitInfo)がInputMethodEventおよびgetWhenメソッドに追加されました。次の
InputMethodEventコンストラクタが変更されました。
InputMethodEvent(Component, int, AttributedCharacterIterator, int, TextHitInfo, TextHitInfo)InputMethodEvent(Component, int, TextHitInfo, TextHitInfo)また、次のメソッドが
EventQueueに追加されました。マルチスクリーンサポートに必須のウィンドウセンタリング API
この変更に関する bugtraq レポート: 4463949多くのバグレポートで報告されているように、マルチヘッド対応システムで稼動する Xinerama 対応アプリケーションで問題が発生しています。 マルチヘッド環境の中には、境界がほとんどあるいはまったく存在しないモニターを使用するものがあります。このような環境では、表示が相互に接合して 1 つの巨大な表示になってしまう場合があります。 この場合、ウィンドウを中央に「適正に」配置しようとすると、複数の画面にまたがって表示されてしまいます。 多くのマルチヘッド環境では、実際の表示領域間に数インチのパッケージ領域を持つ、通常の CRT モニターが使用されます。 この場合、複数画面にまたがるウィンドウで奇妙な効果が発生します。特に、モニター間でドラッグできないウィンドウ (Solaris のログイン画面など) では、この問題が顕著です。 つまり、Xinerama 環境では、ウィンドウを中央に配置するための指針が存在しないことになります。
この問題を解決するため、Xinerama ユーザが「中央配置する」ウィンドウの中央位置を指定し、Xinerama 対応アプリケーションの開発者がそれに対応するコードを記述できるようにする API が X コンソーシアムにより追加されました。
これ以前のリリースで、ウィンドウを中央に配置する場合、次に示すようにデフォルトの
GraphicsDeviceの境界内で中央配置を行なっていました。bounds = getDefaultScreenDevice().getDefaultConfiguration().getBounds(); frame.setLocation(bounds / 2 - size of window / 2);ウィンドウを Xinerama の座標空間全体の中央に配置する Xinerama システムでは、このコードによりウィンドウが「適正に」中央配置されます。4356756 の JDK 修正により、このリリースから Xinerama システムでウィンドウが「適正に」中央配置されます。このシステムでウィンドウは最初のディスプレイの中央に配置します。
この機能を実現するため、
getCenterPointメソッドがGraphicsEnvironmentに追加されました。このメソッドは、次のさまざまなプラットフォームで動作します。
- Win32 および Macintosh:
これらのプラットフォームでは、すべてのモニターが単一の仮想座標空間に含まれます。 ただし、「プライマリ」ディスプレイが 1 つあり、そのプライマリディスプレイには、タスクバー (Win32 の場合)、メニューバー (Mac の場合) が含まれます。 ここで、getCenterPointはプライマリディスプレイの中央の座標を返します。
- X-Window、非 Xinerama システム
各ディスプレイが、左上隅を 0.0 とする独自の座標系を保持します。 この場合にも「最初の」ディスプレイが存在します。 ここで、getCenterPointはプライマリディスプレイの中央の座標を返します。
- X-Window、Xinerama システム
Win32 と同様に、すべてのモニターが単一の仮想座標空間を共有します。 ただし、ユーザが X リソースを使ってウィンドウを配置する中央の位置を指定することも可能です。 X リソースを設定すると、getCenterPointにその値が反映されます。 X リソースを設定しない場合、getCenterPointは仮想座標空間の中央の位置を返します。 この値は、CDE によりデフォルトで設定されるため、ほぼ常に使用されます。JDK 1.4 では、中央配置用の適正なコードは次のようになります。
frame.setLocation(getCenterPoint() - size of window / 2);
GraphicsEnvironmentに追加されたもう 1 つのメソッドは、getMaximumWindowBoundsです。 Headless モードの場合、getCenterPointとgetMaximumWindowBoundsはどちらもHeadlessExceptionをスローします。新規 InputEvent キー修飾子
この変更に関する bugtraq レポート: 4387938 および 4421515以前は、
InputEvent修飾子は、キーボードとマウスボタンに対し、同じ値を保持していました。 特定の状況では、どちらが押されたのかまたはいつから複数のボタンが同時に押されているのかを識別する方法がありませんでした。 この状況には、一度に複数のマウスボタンを押した場合、または修飾キーを使用してマウスイベントを変更した場合が含まれます。この問題に対処するため、
InputEventに次の定数が追加されました。
SHIFT_DOWN_MASKCTRL_DOWN_MASKMETA_DOWN_MASKALT_DOWN_MASKALT_GRAPH_DOWN_MASKBUTTON1_DOWN_MASKBUTTON2_DOWN_MASKBUTTON3_DOWN_MASK次のメソッドが
InputEventに追加されました。
MouseEventのクラス仕様が更新されました。 次の定数のMouseEventへの追加も行われました。
MouseEventの次のメソッドが追加されました。
MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger, int button)getButtongetMouseModifiersText
DragSourceDragEventは、getGestureModifiersExメソッドを新たに保持するようになりました。
イメージスケーリングのパフォーマンスの改善
これ以前のリリースで、drawImage 実装は、1:1 以外のスケーリング係数で呼び出されると、中間バッファを作成しました。中間バッファに格納されたイメージに対するスケーリング操作の実行後に、スケーリングされたイメージがデバイスにコピーされました。 中間バッファ用のメモリ割り当て、およびバッファとの間の追加コピー操作により、パフォーマンスが低下しました。 このリリースでは、Win32 環境の場合、スケーリングされたイメージの描画は、DirectDraw スケール操作により実行されます。DirectDraw では、スケーリングされたイメージは直接 VRAM に送信されます。 Solaris および Linux 環境では、スケーリングされたイメージは 1 度のコピー操作で直接送信先に転送されます。これらの新しい操作では、中間ソフトウェアバッファが使用されないため、メモリの追加割り当てやコピー操作は必要ありません。
高速化されたメモリ管理用の新規メソッド
システムの中には、高速化されたイメージで利用可能なメモリが厳しく制限される場合があります。 VolatileImage を使って作成されたイメージは、この種のメモリに格納されることがあります。 ディスプレイと同じサイズのオフスクリーンイメージは、オフスクリーンイメージに使用されていないすべてのメモリを占有してしまう場合があります。 これ以前のリリースでは、オフスクリーンイメージのユーザは、やはり高速化されたメモリ内で不要になったイメージをフラッシュできませんでした。 新しい GraphicsDevice.getAvailableAcceleratedMemory メソッドは、高速化されたメモリの利用可能なバイト数を返します。 新しい VolatileImage.flush メソッドは、オフスクリーンイメージにより消費されたシステムリソースをすべて解放します。
グレースケールイメージ形式 StaticGray、Index8Gray、および Index12Gray の描画品質および描画速度の向上
バグ 4455845、 4455825、および 4320850 を参照
Beta 2 以前のリリースでは、グレースケール形式 StaticGray、Index8Gray、および Index12Gray に表示品質上の問題がありました。 具体的には、イメージにディザリングノイズが含まれる、シェードが暗すぎる、グラデーションにすべてのシェードが表示されないなどの問題がありました。 これらの問題は、このリリースで解決されました。 StaticGray、Index8Gray、Index12Gray 形式のイメージの、より高品質な描画を行うことが可能になりました。 また、Java 2D パイプラインアーキテクチャの全般的な改善により、これらのイメージ形式をより高速に描画できます。
ほかの変更点については、Java 印刷サービスおよび Image I/O を参照してください。
ほかの言語のデバッグサポート
Java Platform Debugger Architecture が拡張されたため、Java 以外のプログラミング言語ソースを Java プログラミング言語ソースに翻訳し、あとからデバッグすることが可能になります。 以下の表に、新規 API、およびコメントの変更された API を示します。 この情報は、SourceDebugExtension に基づいています。
ページダイアログでのマージンの表示
これ以前のリリースで、Java 印刷サービスページダイアログには、用紙のサイズ、種類、および向きといったページ書式を表す属性だけが表示されました。 このリリースから、クライアントがページダイアログでページのマージンを表す MediaPrintableArea 属性を設定できるようになりました。Solaris および Win32 の PrintService 実装による、出力データ用 AUTOSENSE 文書様式サポート
プリンタがサポートする文書の種類が、ネイティブのオペレーティングシステムから JVM に報告できる文書の種類を含み、それより多い場合、AUTOSENSE は有用です。 たとえば、プリンタは PDF の直接印刷をサポートするが、Java 印刷サービスがそれを検出できない場合、そのプリンタを使用するアプリケーションは AUTOSENSE DocFlavor を使用して、印刷データをプリンタにスプールできます。 そのため、これが有効なのは、プリンタが、プリンタへの実データ送信をサポートすることを開発者が知っている場合だけです。 Solaris および Win32 の PrintService 実装では、要求属性 (用紙の向きなど) とともに AUTOSENSE を指定することはできません。これは、AUTOSENSE はいかなる方法でも解釈されず、プリンタに直接送信されるためです。
バグ修正および機能拡張
- 修正されたバグ 4465033: ロケール DE、IT、FR、SV、および JA では、署名付きアプリケーションまたはアプレットのセキュリティダイアログを表示しようとすると、Java Web Start 1.0.1 がハングアップします。 このバグは、Java Web Start 1.0.1_01 (J2SDK 1.4.0 Beta 2 に同梱) で修正されました。
アプリケーションクラスパス内のプラグインの自動検出
独自のプラグインを使用するクライアントは、アプリケーション実行時に、明示的に scanForPlugins を呼び出す必要はありません。これは、Image I/O が自動的にプラグインのクラスパスを走査するためです。 クライアントが走査する必要があるのは、プラグインが動的にクラスパスに追加される場合だけです。
ACTION_COMMAND_KEY プロパティを優先する AbstractButton.configurePropertiesFromAction
この変更に関する bugtraq レポート: 4457940
これ以前のリリースで、
AbstractButtonメソッドconfigurePropertiesFromAction(Action)およびconfigurePropertiesFromAction(Action, String[])はACTION_COMMAND_KEYプロパティを優先しませんでした。 このリリースで問題は解決されました。 このため、次に示すAbstractButtonのサブクラス内のconfigurePropertiesFromActionメソッド用 javadoc が影響を受けます。
JButton.configurePropertiesFromAction(Action)JMenu.configurePropertiesFromAction(Action)JCheckBox.configurePropertiesFromAction(Action)JRadioButton.configurePropertiesFromAction(Action)新規 AbstractDocument.replace メソッドのサポートの拡張
この変更に関する bugtraq レポート: 4458513
RFE 4431047 の一環として、
replaceメソッドがAbstractDocumentに追加されました。 このメソッドからremoveおよびinsertString(Documentの変化に対応する、インタフェース内で定義されたメソッド) を起動できるようにするため、writeLockの起動するときの制限が緩和されました。 これにより、replaceと、以前のバージョンのAbstractDocument(removeおよびinsertStringのオーバーライドのみを実行する) とは互換性を保持します。ヘッドレスモードで JPopupMenu.setVisible(true) によりスローされる HeadlessException
この変更に関する bugtraq レポート: 4401222
新規ヘッドレスモードの導入時に、
JPopupMenu.setVisible(true)が実装されました。このため、ヘッドレスモードで呼び出しが行われると、NullPointerExceptionがスローされていました。 この問題は修正され、ヘッドレスモードではこの操作が実行できないことを示すHeadlessExceptionが代わりにスローされるようになりました。DefaultTableModel で name 引数に null が許容される
この変更に関する bugtraq レポート: 4474094
これ以前のリリースで、
DefaultTableModel.addColumn(Object)およびDefaultTableModel.addColumn(Object, Vector)メソッドでname引数にnullを指定することはできず、指定するとIllegalArgumentExceptionがスローされていました。 ほかの手段 (コンストラクタを使用するか、フィールドを直接操作する) では列名にnullを指定することが可能であるように、addColumnメソッドでもnull値が許可されるようになりました。processKeyEvent をオーバーライドしない JFrame、JDialog、および JApplet
この変更に関する bugtraq レポート: 4462408
Swing では、
JComponentに対するキーバインドを登録することが可能です。以前のリリースでは、Swing のトップレベルコンポーネント (JFrame、JDialog、およびJApplet) のいずれかにフォーカスが存在する場合、これらのトップレベルコンポーネントでprocessKeyEvent(java.awt.Componentで定義) をオーバーライドして、キーバインドをアクティブにする必要がありました。java.awt.KeyEventPostProcessorの追加、および Swing によるこの機能 ( RFE 4389332) の利用により、Swing のトップレベルコンポーネントでこれらのメソッドをオーバーライドする必要はなくなりました。 このリリースから、これらのメソッドはトップレベルから削除されており、現在は継承という方法が取られています。JWindow コンストラクタでのドキュメントヘッドレス例外
この変更に関する bugtraq レポート: 4483258
このリリースではヘッドレスモードが追加されましたが、2 つの
JWindowコンストラクタは、HeadlessExceptionがスロー可能であることを示しませんでした。 これは、Window(Window, GraphicsConfiguration)およびJWindow(GraphicsConfiguration)用のドキュメントで修正されています。
シグナル連鎖機能
Java 2 SDK, Standard Edition, (J2SDK) v1.4 には、新しいシグナル連鎖機能が含まれています。 シグナル連鎖機能を使用すると、Java プラットフォームと、独自のシグナルハンドラをインストールするネイティブコードとの相互運用性が向上します。シグナル連鎖機能には、2 つのコンポーネントが含まれます。
- VM 作成時のインストール済みのシグナルハンドラのサポート
- JNI コード内部または別のネイティブスレッドからのシグナルハンドラのインストールサポート (VM 作成後のシグナルハンドラのインストールを含む)
シグナル連鎖機能は、以前のバージョンの VM で発生したシグナル処理上の問題を解決するために導入されました。 バージョン 1.4 以前では、SIGBUS、SIGSEGV、SIGILL、SIGFPE、SIGPIPE、および SIGUSR1 用のインストール済みシグナルハンドラを VM で使用できませんでした。 これらのシグナルハンドラは、VM が使用するシグナルハンドラと衝突する可能性がありました。 アプリケーションからシグナルハンドラ自体 (JNI コード内など) を変更することはできません。これは、VM により生成されるシグナルの中に、VM から操作できないものが存在するためです。
J2SDK 1.4 の新しいシグナル連鎖機能は、VM 作成時にすべてのインストール済みシグナルハンドラを保存することにより、インストール済みシグナルハンドラをサポートします。 あとでシグナルが生成されると、VM はインストール済みハンドラを起動します。
シグナル連鎖機能は、アプリケーションと共に、共有ライブラリ libjsig.so のリンクおよびロードも行います。 このライブラリは、signal()、sigset()、および sigaction() などの呼び出しを遮断して、VM のシグナルハンドラの置き換えを防ぎます。 その代わり、これらの呼び出しにより新たなシグナルハンドラが保存されます。 その後、シグナル生成時に、VM は libjsig.so への呼び出しを行なって、保存されたハンドラを取得および起動します。
シグナル連鎖機能は、機能拡張要求 4381843 に対応するために導入されました。
より多くのエンコーディングサポート
J2SE 1.4 Beta 2 には、新たにサポートされる次のエンコーディング用のコンバータが含まれます。これらの追加エンコーディングは、次のバグに対応しています: 4328178、4463536、および 4420751
- GB18030 - 簡体字中国語、PRC 標準
- Big 5 - HKSCS Big 5 (香港例外含む)、繁体字中国語
- ISCII91 - インド語スクリプト用エンコーディング
java.text.Bidi のメンバ名の改訂
Beta 2 リリースでは、java.text.Bidi クラスのメンバ名が次のように変更されています。FLAG_DIR_DEFAULT_LTR -> DIRECTION_DEFAULT_LEFT_TO_RIGHT FLAG_DIR_DEFAULT_RTL -> DIRECTION_DEFAULT_RIGHT_TO_LEFT FLAG_DIR_LTR -> DIRECTION_LEFT_TO_RIGHT FLAG_DIR_RTL -> DIRECTION_RIGHT_TO_LEFT isLTR -> isLeftToRight isRTL -> isRightToLeft baseIsLTR -> baseIsLeftToRight
SimpleDateFormat パターンチェック
java.text.SimpleDateFormat クラスは、書式設定および構文解析中ではなく、コンストラクタまたは applyPatttern メソッド内でパターンをチェックするようになりました。このため、null や無効なパターンによる例外が早い段階でスローされます。 これは、4326988 に対応して行われた変更です。
ひらがなおよびカタカナ文字の適正な表示
Solaris オペレーティング環境用の Beta リリースでは、TextLayout.draw() で Bold、Italic、および Bolditalic を指定した場合、日本語のひらがな (/u3041 - /u309e) およびカタカナ (/u30a1 - /u30fe) が適正に表示されませんでした。 このバグ (4432069) は、Beta 2 リリースで修正されました。
java.util.logging.Level への追加
Logging API では、ログメッセージが「Level」を保持します。Level に含まれるレベル名は、エンドユーザへの表示が可能です。 ただし、これまでレベル名のローカライズはサポートされていませんでした。
サン以外により新規レベルの追加が行われる可能があるため、地域対応のリソースバンドルを、指定されたレベルと関連付ける標準機構を定義する必要があります。
次の変更により、Level クラスに対するレベル名の地域対応サポートが追加されました。
java.util.logging.Level クラス内の 1 つの新規コンストラクタおよび 2 つの新規メソッド
- protected Level(String name, int value, String resourceBundleName)
- public String getResourceBundleName()
- public String getLocalizedName()
この変更に関連するバグレポートは、4385439 です。
java.util.logging.Logger の変更
Logger クラスには、コアロギングメソッド
void log (LogRecord)が 1 つ含まれます。 これは、強力ですが使い方の難しいメソッドです。 このメソッドにより、Logger クラス内の多数の便利なメソッドがコアメソッドの単純なラッパーとして動作し、種々のログメッセージをさまざまな引数を使って簡単に記録できます。次の 3 つの要素で、これら便利なメソッドは改訂されました。
- 元のセットでは「簡潔な配列リテラル」の発生を仮定していたが、これはこのバージョンから削除された。 このため、単一のパラメータの引き渡しを簡単にする目的で、3 つのきわめて有用なメソッドが追加された。
- IBM より、明示的な地域対応情報を記録する 4 つの特別なメソッドを追加するよう強い要求があった。
- 便利なメソッドセットの単純化および合理化が広く求められていた。 このため、重要度の低い 21 のメソッドの削除、およびほかの 3 つのメソッドの名前変更が行われた。
これらの変更により、39 個存在した有用なメソッドは 25 個に減少し、わかりやすい形でグループ化されました。
以下に変更の概要を示します。
次の 21 個のメソッドが削除されました。
- void config(String, Object[])
- void config(String, String, String)
- void config(String, String, String, Object[])
- void fine(String, Object[])
- void fine(String, String, String)
- void fine(String, String, String, Object[])
- void finer(String, Object[])
- void finer(String, String, String)
- void finer(String, String, String, Object[])
- void finest(String, Object[])
- void finest(String, String, String)
- void finest(String, String, String, Object[])
- void info(String, Object[])
- void info(String, String, String)
- void info(String, String, String, Object[])
- void severe(String, Object[])
- void severe(String, String, String)
- void severe(String, String, String, Object[])
- void warning(String, Object[])
- void warning(String, String, String)
- void warning(String, String, String, Object[])
次の 7 つのメソッドが追加されました。
- void entering(String, String, Object)
- void log(Level, String, Object)
- void logp(Level, String, String, String, Object)
- void logrb(Level, String, String, String, String, Object)
- void logrb(Level, String, String, String, String)
- void logrb(Level, String, String, String, String, Object[])
- void logrb(Level, String, String, String, String, Throwable)
次の 3 つのメソッドの名前が変更されました。
- void log(Level, String, String, String) が logp へ
- void log(Level, String, String, String, Object[]) が logp へ
- void log(Level, String, String, String, Throwable) が logp へ
また、log(LogRecord) の javadoc 仕様にいくらかの変更が加えられました。
この変更に関連するバグレポートは、4464348 です。
バックトレース回避策の削除
J2SDK 1.4 以前のリリースでは、Throwable クラスは、直列化時にスタックのバックトレースを保持しませんでした。 以前、ロギング API は、望ましくない回避方法を使って、直列化するときに LogRecord のバックトレースを保持していました。回避方法には、特殊メソッド LogRecord.getThrownBackTrace を呼び出して LogRecord のバックトレースを取得することが含まれていました。このため、スタックバックトレースの適正な直列化および直列化解除が行われるよう、Throwable クラスに変更が加えられました。
現在では、LogRecord クラスの LogRecord.getThrownBackTrace メソッドなどの回避策を使用せずに済みます。
java.util.logging.LogRecord クラスで、次のメソッドが削除されました。
- public String getThrownBackTrace()
この変更に関連するバグレポートは、4451686 です。
FileHandler での追加モードのサポート
ロギング API には、FileHandler 出力クラスが含まれます。 これ以前のリリースでは、 FileHandler クラスは出力ファイルを常に新規作成していました。 このため、ロギング API の初期使用段階で、操作性の問題が表面化しました。 たいていの場合、出力ファイルを既存のファイルセットに追加できるようになることが望まれます。
この API 変更には、以下が含まれます。
次の 2 つの新規コンストラクタが java.util.logging.FileHandler に追加されました。加えて、javadoc クラスで新規ログ構成プロパティを指定することが可能になりました。
- public FileHandler(String pattern, boolean append) throws IOException, SecurityException
- public FileHandler(String pattern, int limit, int count, boolean append) throws IOException, SecurityException
この変更に関連するバグレポートは、4452277 です。
JavaTM Certification Path API
Java Certification Path API の変更点については、プログラマーズガイドの 「J2SE 1.4 Beta からの変更点」 を参照してください。
JAAS (JavaTM Authentication and Authorization Service)
「JAAS Tutorials」には、JAAS のさまざまな使用法が実例付きで解説されています。
「JAAS Reference Guide」 および 「JAAS LoginModule Developer's Guide」が更新されました。
JSSE (JavaTM Secure Socket Extension)
セキュリティ保護されたソケットプロトコルを選択する新規メソッド
SSLSocketおよびSSLServerSocketに新規メソッドが追加されたので、開発者は、ソケットで使用するセキュリティ保護されたソケットプロトコル (SSLv3 または TLSv1 あるいはその両方) を正確に選択できるようになりました。これは、機能拡張番号 4478803 の一部として実装されました。
X509TrustManagerメソッドの変更
X509TrustManager の isClientTrustedおよびisServerTrustedメソッドは、それぞれcheckClientTrustedおよびcheckServerTrustedに名前が変更されました。 証明連鎖がこのTrustManagerにより信頼されない場合、checkClientTrustedおよびcheckServerTrustedメソッドは、以前のメソッドのようにbooleanを返すのではなく例外をスローします。 これにより、実装は、信頼判定の失敗の原因を確認できます。 注:X509TrustManagerは、J2SDK, v 1.4 で新たに追加されました。これは、機能拡張番号 4329114 の一部として実装されました。
HostnameVerifier verifyメソッドの変更HostnameVerifier verifyメソッドに対し、受信した証明書ではなく、ネゴシエーション済みのSSLSessionが渡されるようになりました。 これにより、SSLSessionでは、ネゴシエーション済みの暗号群、交換済みの証明書などのクエリーを実行できます。 注:HostnameVerifierは、J2SDK, v 1.4 で新たに追加されました。これは、機能拡張番号 4484246 の一部として実装されました。
Zip ファイルで入手可能なサンプルファイル
JSSE サンプルファイルは、zip ファイルで入手可能です。これは、Web でドキュメントを閲覧している場合や、サンプルをダウンロードしたい場合に便利です。
HTTP ダイジェスト認証
HTTP ダイジェスト認証の実装が更新され、プロキシおよび起点サーバがサポートされるようになりました。また、RFC2617 で定義されたすべての機能を実装しました (auth-int モードを除く)。ダイジェスト認証機構の動作を変更する、多数のシステムプロパティが追加されました。 これらのプロパティの詳細は、「Networking Properties」マニュアルを参照してください。
この変更は、バグレポート 4432213 に対応して行われました。
リテラル IPv6 アドレス書式の変更
J2SDK 1.4 Beta 2 では、IPv6 のリテラルアドレス処理がより明示的に行われます。 この変更は、IETF 標準 RFC 2373 (IPv6 アドレスアーキテクチャ) および RFC 2732 (URL によるリテラル IPv6 アドレス) に準拠するため、および新たに取得した IPv6 アドレスを使用する既存のアプリケーションとの下位互換性に関する潜在的な問題を最小限に抑えるために行われました。 基本的な規則は、URL/URI のコンテキスト (Java クラスローダおよび SocketPermissions のコンテキストで定義された 'codebase' を含む) では RFC 2732 に準拠し、それ以外の場合には RFC 2373 に準拠するというものです。InetAddress および Inet6Address クラスの getByName(String host) および getAllByName(String host) メソッドでは、リテラル IPv6 アドレス内で 'host' が指定されると、RFC 2373 で定義されたアドレスが受け入れられます。 getHostAddress() メソッドでは、完全な書式が返されます。 完全な書式は、x:x:x:x:x:x:x:x のように定義されます。ここで「x」は、アドレスを構成する 8 つの 16 ビット数で表す 16 進数です。 この書式が選ばれたのは、ほかのテキストデータと組み合せて使用しても明確に識別できるためです。
URL クラスおよび URI クラスでは、コンポーネント化されたコンストラクタに対して、'host' パラメータがリテラル IP アドレスとして表現される場合、アドレスを RFC 2732 に規定されているように角括弧 ('[' および ']') で囲む必要があります。ただし、RFC 2373 で規定されたリテラル IPv6 アドレス書式も受け入れられます。 getHost() メソッドは、
URLのホスト名を返します。 ホストの書式は、RFC 2732 に準拠します。リテラル IPv6 アドレスの場合、このメソッドにより、角括弧 ('[' および ']') で囲まれた IPv6 アドレスが返されます。SocketPermission クラスでは、ホスト仕様にリテラル IPv6 アドレスが含まれる場合、RFC 2732 で定義された書式を使用する必要があります。IPv6 アドレスは、角括弧 ('[' および ']') で囲みます。 ただし、IPv6 アドレスを使用する既存のアプリケーションとの下位互換性に関する問題を最小限に抑えるため、明白なものはすべてクラスにより自動的に解決されます。
getByAddr メソッドの名前変更
J2SE 1.4 Beta の InetAddress および NetworkInterface クラスに導入された新規メソッド getByAddr は、J2SE 1.4 Beta 2 では getByAddress という名前になりました。IPv6 リンクローカルアドレス
Beta リリースでは、IPv6 リンクローカルアドレスに送信または接続しようとすると、引数が無効であることを示す SocketException がスローされました。 これは、Beta 2 リリースで修正されました。 IPv6 リンクローカルアドレスに接続時に、ルーティングテーブルにより、使用するネットワークインタフェースが決定されます (netstat -r -A inet6)。
動的サーバホスト名
java.rmi.server.hostnameプロパティを動的に更新することにより、以降のエクスポートでの新規ホスト名の使用を指示できるようになりました。 このため、新規ホスト名の値が、プロパティの更新後にエクスポートされるオブジェクトのスタブに含まれます。プリミティブ Class オブジェクトの直列化
以前のリリースでは、RMI 呼び出しでプリミティブのClassオブジェクトを渡そうとすると、ClassNotFoundExceptionがスローされました。 このリリースでは、プリミティブ型としてClassオブジェクトを含むオブジェクトは、リモートメソッドパラメータまたは戻り値として渡すこと、およびjava.rmi.MarshalledObjectインスタンスに格納することが可能になりました。
javac の新規 -Xswitchcheck オプション
javac バイトコードコンパイラは、switch ブロック内の「不成立の」case 文を検出するオプション -Xswitchcheck を新たにサポートします。 新しいオプションの詳細は、javac のマニュアルを参照してください。新しい -Xcheck:jni オプション
Java アプリケーション起動ツールは、オプション -Xcheck:jni を受け付けます。 このオプションは、J2SE 1.2.2 の -Xcheck:jni (J2SE 1.3.0 で削除されました) に似ています。 このオプションを指定すると、Java Native Interface (JNI) 機能の追加チェックを行います。Javadoc の変更
Beta 2 リリースでの Javadoc ツールの変更点は、「What's New in Javadoc 1.4」に記載されています。
AccessibleExtendedComponent.getAccessibleKeyBinding
インタフェース AccessibleExtendedComponent に新しいメソッド getAccessibleKeyBinding が含まれており、オブジェクトに関連するキーバインディングを返します。新しい AccessibleRole 制約
クラス AccessibleRole には、以下の新しい制約が含まれています。
- DATE_EDITOR
- FONT_CHOOSER
- GROUP_BOX
- SPIN_BOX
- STATUS_BAR
HTML の object タグに対するユーザ補助機能サポート
このリリースでは HTML の object タグに対するユーザ補助機能サポートが追加されています。 CTRL-t および SHIFT-CTRL-t を押すと、それぞれ HTML 文書中の object タグに関連する次のコンポーネント、および 1 つ前のコンポートにナビゲートします。 CTRL-SPACE を押すと、コンポーネントに関連付けられたデフォルトのアクションが起動します。HTMLEditorKit キーボードリンクトラバーサル追跡のサポート
ユーザ補助機能は、HTMLEditorKit キーボードリンクトラバーサルを追跡する方法を必要としました。 この機能をサポートするために、定数 AccessibleContext.ACCESSIBLE_HYPERTEXT_OFFSET が追加されました。ユーザ補助機能プロパティ
javax.accessibility.assistive_technologies プロパティで、JVM にロードするユーザ補助機能を指定します。スクリーンリーダプロパティ
javax.accessibility.screen_reader_present プロパティを True に設定すると、Java プラットフォームライブラリは、システムにスクリーンリーダが存在することを認識します。 アプリケーションの開発者はこのプロパティをチェックできます。 アプリケーションが自己表明式で、さらにスクリーンリーダが存在する場合は、開発者は自己表明機能をオフにできます。
|
Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.
|
|