WindowsVista 調査速報


last update.2007/10/25
Microsoft(R) Windows Vista(TM)上でのJavaアプリケーションについての弊社調査内容をお知らせします。
現在、調査は続行中であり、新たな情報が分かり次第随時更新したします。(調査OS: WindowsVista Bussiness)
ここに記述している内容が、注意事項の全てではないことは予めご了承ください。
また、Vista機能の詳細については、マイクロソフト社のホームページをご覧ください。

Webtribe / Visual Frame の Windows Vista 対応についての最新状況 (MKI公式文書)
!!はじめに必ずお読みください!!

Sun JDK での対応状況 2007/10/25 追記

  1. J2SE1.4.2
    Supported System Configurations in Java[tm] 2 Platform v1.4.2 より引用。
    Support for Windows Vista (32-bit only) was introduced in 1.4.2_15. The release has passed all of our standard platform tests. However, no improvements to enable native Windows Vista look and feel have been made or are planned for the 1.4.2 release family. For the best possible client application experience, Sun recommends using the latest version of the latest release family available on our download page .
  2. J2SE5.0
    サポート対象のシステム構成 JavaTM 2 Platform Standard Edition 5.0 より引用。
    Windows Vista のサポートは J2SE 5.0、Update 11 から導入。
  3. JavaSE6
    JavaTM SE 6 Release Notes にて 「Windows Vista 使用時の注意」の記述があります。
    Vistaセキュリティ関連の項目などは、1.4.2、 5.0 使用時にでも参考になる。

Java/Swingでの調査

  1. フレーム表示可能領域の変更
    ウィンドウタイトルの幅などが変わるため、WindowsXPではぴったりの画面サイズだったものが、ぴったりにならなくなります。
    WindowsXPに比べて、表示可能サイズが小さくなる傾向があります。
    また、最小ウィンドウサイズも異なる様子。
    JFrame#setSize(100,50) にて 幅100,高さ50 を指定した時の参考値
    OS/ThemeJFrame#getInsets()表示イメージJFrame#getSize()内部表示エリア
    WindowsVista/Aerotop=29,left=8,bottom=8,right=8Vista_Aero_Framewidth=125,height=50width=109,height=13
    WindowsVista/Vistaベーシックtop=29,left=8,bottom=8,right=8Vista_Basic_Framewidth=125,height=50width=109,height=13
    WindowsVista/クラッシック top=23,left=4,bottom=4,right=4Vista_Classic_Framewidth=116,height=50width=108,height=23
    WindowsXP top=23,left=4,bottom=4,right=4WindowsXPwidth=112,height=50width=104,height=23
    JFrame#setSize(200,100) にて 幅200,高さ100 を指定した時の参考値
    OS/ThemeJFrame#getSize()内部表示エリア
    WindowsVista/Aerowidth=200,height=100width=184,height=63
    WindowsVista/Vistaベーシックwidth=200,height=100width=184,height=63
    WindowsVista/クラッシックwidth=200,height=100width=192,height=73
    WindowsXPwidth=200,height=100width=192,height=73
  2. Aeroモードで起動できない問題
    JDK1.5.0_07以前のJDKにて WindowsテーマをAeroの状態にして 画面を表示すると、クラシックに一時的に変更するというダイアログが表示されます。
    change_basic
    この時、Aero から Vistaベーシック のテーマに切り替わります。
    プログラムを終了すると 自動的にAero に戻ります。
  3. CD/DVDドライブに対してアクセスできない問題
    JDK1.5.0_07,08,09,10 にて JFileChooserを開き、CD/DVDドライブ(E:) を選択するとExceptionが発生します。
    (ドライブにメディアが入っていても、Exceptionが発生します。)
    JDK1.5.0_11 で確認したところ、Exceptionは発生しませんでした。
    Exceptionの内容は以下の通りです。
    Exception in thread "Basic L&F File Loading Thread" java.lang.InternalError: Unable to bind E:\ to parent
    	at sun.awt.shell.Win32ShellFolder2.getIShellFolder(Win32ShellFolder2.java:322)
    	at sun.awt.shell.Win32ShellFolder2.listFiles(Win32ShellFolder2.java:538)
    	at javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:422)
    	at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:195)
    
  4. System.getProperty("os.name")で "Windows NT (unknown)" と表示される問題
    System.getProperty("os.name")の値がJDK1.5.0_07,08,09 では 「Windows NT (unknown)」と表示されます。
    JDK1.5.0_10,11 JDK1.6.0 では 「Windows Vista」と表示されます。
    2007/04/18 追記:JDK1.4.2_14 にて 「Windows Vista」と正しく表記されることを確認。
    2007/10/25 追記:各バージョンごとの情報まとめ
    MejorVersionVista表示になるバージョン
    1.4.21.4.2_14 以上
    1.5.01.5.0_10 以上
    1.6.01.6.0以上(初期バージョンからVista表示)
  5. InputContextのインスタンスが違うものにsetCharacterSubsetsした時の動作
    InputContextのインスタンスが違うものにSubset[]を設定した時、WindowsXPでは 設定値が反映されるが、 WindowsVistaでは 設定が反映されない時がある。
    これにより、InputContext#setCharacterSubsetsによるIMのOn/Offがうまく動かない場合が発生します。
    この挙動はJDK1.4.2,J2SE5.0, 6.0 ともに発生することを確認しています。 テストコード
    2007/04/18 追記:現状把握している状況としては以下になります。
    A画面の InputContext#setCharacterSubsets にて InputSubset.KANJI を設定して IME-ONの状態に設定する。
    その状態にて B画面を起動し、B画面の InputContext#setCharacterSubsets にて InputSubset.LATIN_DIGITS を設定して IME-OFFにしようとしても、OFFにならず IME起動したままになってしまう。
    B画面にて InputSubset.KANJI を設定後、InputSubset.LATIN_DIGITS を設定すると IME-OFFの状態にすることが出来る。

    この問題によって、弊社製品RunClientでも IMEの切替が正常に行われない場合があります。
    具体的には下記手順で、この問題を確認することができます。

    1. 画面Aと画面Bの二つの画面を用意する。
    2. 画面Aに "日本語"を割り当てたテキストフィールドを用意する
    3. 画面Bに "コード"を割り当てたテキストフィールドを用意し、画面起動時にフォーカスが当たるように設定しておく。
    4. 画面Aに SetFrameFunctionKeyListenerを使用して、ファンクションキーを押すことで、画面Bが起動できるようにする。
    5. RunClientを起動し、画面Aを起動して テキストフィールドにフォーカスがある状態で、画面Bを起動する。

    このようにした時に、画面Bでの初期コンポーネントが "コード"であるにも関わらず、 日本語入力モードの状態のまま画面が起動されます。

    2007/10/25 追記: ⇒RunClientエンジンで動作差を吸収できるか調査中 ver.120-09, ver.113-15 のバージョンにて暫定対応中(ただし、os.nameがVistaと取得できるJDKバージョンのみ)

  6. WindowsUIでJTableを表示すると、TableHeaderが変な表示になる。
    table_windows_ui
    MetalUIでは問題ありません。
    (Webtribe/VisualFrameの標準のUIは MetalUIです。)
  7. Vistaの文字の問題
    Vistaでは「メイリオ」フォント(JIS X0213:2004をサポート)を標準搭載され、 従来のMS明朝が、バージョンアップされX0213:2004対応になります。
    これにより、以下の注意が必要です。
    1. 同じコードポイントでも字体が異なる文字があります。
    2. Vistaで入力した文字が、Windows XPで正しく表示できない文字があります。
    3. 追加された文字の一部が4バイト文字になります。

    1.2.の機種依存文字の問題は今までにも存在した問題ですので、4バイト文字について確認しました。

    J2SE5.0からは補助文字のサポートとして、コードポイントを扱えるAPIが提供されています。
    Java プラットフォームにおける補助文字のサポート
    これにより、入力された文字のコードポイントを取得し、確認することができます。
    String#toCharArray() にて分割された文字(char)でも Character#isHighSurrogateやisLowSurrogateによりサロゲート・ペアの一部かどうかの判断が可能です。 テストコード

    4バイト文字としてもうひとつ考慮が必要なのは 文字合成により1つの文字 を作り出しているものです。
    Vistaで化ける字,化けない字(続報) の 図14.文字合成を必要とする非漢字25字 に表示されているような合成文字の場合、 Unicodeの文字を2つ合成することによって1文字を表現しているため、Java上では2文字として扱われてしまいます。
    たとえば、JIS213:1-5-87に定義されている「カ゜」をSwing画面上から入力し、入力文字の内容を確認すると、
    1文字目CodePoint:30ab
    2文字目CodePoint:309a
    のコードポイントになり、String#codePointCount による数も[2]になってしまいます。
    参考までに、「カ + ゜」の2文字で入力した場合のCodePointは
    1文字目CodePoint:30ab
    2文字目CodePoint:309c
    でした。

実行環境について

  1. JavaWebStartでの実行
    J2SE6.0がデフォルトインストールされているため、JWS実行時にはJ2SE6.0が使用される。
    そのため、J2SE6.0使用時のJAR読み込み順番の問題に対応する必要がある。
    (J2SE5.0までは jar タグの記述順番で読み込みしていたが、J2SE6.0では mainクラスが含まれているJARを優先する)
    不具合報告(Ver1.2.0) 「■ JDK/JRE 1.6をインストール後、パッチが適用されなくなる問題 」 を参照。
  2. Internet Explorer 7
    CSS対応バージョンが 2.1になった。⇒ IE6などで表示できていたWebページが正しく表示できるか確認が必要。
    HTTPS接続 SSLv3/TLSv1がデフォルトになる ⇒ 今までアクセスできたURLにアクセスできるかの確認が必要。
  3. ユーザーアカウント制御(UAC)
    アプリケーションの実行などを、ユーザの明示的な同意が必要になります。
    ユーザに意識させることなく、裏でOSとのアクセス(ファイルなど)をしていたりするようなものは確認が必要と 思われる。
  4. 弊社製品 評価版動作について
    弊社製品評価版にて使用している ポート(49153,49152) が、既に使用されているため実行できない環境が確認されています。
    これについては、VistaOSが影響しているのか、特定マシン上のアプリが影響しているのか など、まだ不明の状態で調査中です。

参考URL

J2SE1.4.2 リリースノート
J2SE5.0 リリースノート
JavaSE6 リリースノート

Valid XHTML 1.1