(57)【要約】【課題】  本発明は、仮想マシン上でアプリケーションを動作させる情報処理装置であって、フォントの変更の際に、当該情報処理装置の負荷を抑えることを目的とする。【解決手段】  仮想マシン上でアプリケーションを動作させる情報処理装置であって、前記仮想マシンの設定言語に対応するフォントを設定する設定手段と、前記設定されたフォントに対応するフォントファイルを読み込み、当該フォントファイルのキャッシュへのポインタで構成されるフォントキャッシュを作成する作成手段と、前記フォントキャッシュを用いて、前記アプリケーションで用いるフォントを表示装置に表示させる制御手段と、前記仮想マシンの設定言語が変更された場合、前記作成手段で作成された前記フォントキャッシュを変更する変更手段と、有することを特徴とする。【選択図】  図９
2017215801.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン上でアプリケーションを動作させる情報処理装置であって、
前記仮想マシンの設定言語に対応するフォントを設定する設定手段と、
前記設定されたフォントに対応するフォントファイルを読み込み、当該フォントファイルのキャッシュへのポインタで構成されるフォントキャッシュを作成する作成手段と、
前記フォントキャッシュを用いて、前記アプリケーションで用いるフォントを表示装置に表示させる制御手段と、
前記仮想マシンの設定言語が変更された場合、前記作成手段で作成された前記フォントキャッシュを変更する変更手段と、有することを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記仮想マシンの設定言語が変更された場合、前記表示装置の表示を再描画させることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記変更手段は、前記仮想マシンの設定言語が変更された場合、前記作成手段で作成された前記フォントキャッシュを削除し、フォントキャッシュを再作成することを特徴とする請求項１または２のいずれか１項に記載の情報処理装置。
【請求項４】
前記変更手段は、前記仮想マシンの設定言語が変更された場合、前記フォントファイルのキャッシュを削除することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記変更手段は、前記情報処理装置に外部装置が接続された場合、前記外部装置のフォントの設定に基づき、前記作成手段で作成された前記フォントキャッシュを変更することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記設定手段は、ユーザの選択に基づき、前記仮想マシンの設定言語を設定することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
仮想マシン上でアプリケーションを動作させる情報処理装置の情報処理方法であって、
設定手段が、前記仮想マシンの設定言語に対応するフォントを設定する設定工程と、
作成手段が、前記設定されたフォントに対応するフォントファイルを読み込み、当該フォントファイルのキャッシュへのポインタで構成されるフォントキャッシュを作成する作成工程と、
制御手段が、前記フォントキャッシュを用いて、前記アプリケーションで用いるフォントを表示装置に表示させる制御工程と、
変更手段が、前記仮想マシンの設定言語が変更された場合、前記作成工程で作成された前記フォントキャッシュを変更する変更工程と、有することを特徴とする情報処理装置。
【請求項８】
コンピュータを、仮想マシン上でアプリケーションを動作させる情報処理装置であって、
前記仮想マシンの設定言語に対応するフォントを設定する設定手段と、
前記設定されたフォントに対応するフォントファイルを読み込み、当該フォントファイルのキャッシュへのポインタで構成されるフォントキャッシュを作成する作成手段と、
前記フォントキャッシュを用いて、前記アプリケーションで用いるフォントを表示装置に表示させる制御手段と、
前記仮想マシンの設定言語が変更された場合、前記作成手段で作成された前記フォントキャッシュを変更する変更手段と、有することを特徴とする情報処理装置として機能させるためのコンピュータのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン上でアプリケーションを動作させる情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来から、画面表示を伴うコンピュータプログラムを実行するための仮想マシン技術が知られている。当該技術により、プログラムが指定したフォントの文字は、表示画面に表示される。しかし、仮想マシンの実行環境によって、表示すべきフォントは変わり得る。そこで、仮想マシンには表示するフォントを設定する機能が備わっている。表示するフォントの設定のためには、仮想マシンに標準の設定ファイルを用いることが一般的である。
【０００３】
起動後に設定されている言語を切り替える場合、フォントも、切り替え後の言語に対応して変更する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１４９８５８号公報
【特許文献２】特開２００５−１９６３９７号公報
【特許文献３】特許第４８９６３６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１、特許文献２、特許文献３には、設定されている言語に合わせて表示するフォントを変更する技術が開示されている。
【０００６】
特許文献１には、ＤＶＤの再生開始時に言語リソースをロードして再生装置のメモリ上にキャッシュすることで、コンテンツ再生中のディスクシークに伴う再生中断を防ぐことが開示されている。しかし、言語を再選択した場合には、言語リソースを再ロードのためにＤＶＤのディスクシークが発生し、遅延が生じる可能性がある。
【０００７】
特許文献２には、各ＵＩの領域に設定されている言語に対応するフォントを用いて文字を描画することで、文字化けを防ぐことが開示されている。しかし、ＵＩごとに言語の設定を行うため、処理負荷が高くなることがある。
【０００８】
特許文献３には、操作しているファイルのプロパティから言語情報を取得し、複数のフォントファイルのどれを使うかを選択することが開示されている。選択した複数のフォントは、マージされた単一のキャッシュとして利用される。しかし、マージ処理の際には、情報処理装置への負荷が高くなることがある。
【０００９】
本発明は、上記の課題に鑑みてなされたものであり、仮想マシン上でアプリケーションを動作させる情報処理装置であって、フォントの変更の際に、当該情報処理装置の負荷を抑えることを目的とする。
【課題を解決するための手段】
【００１０】
仮想マシン上でアプリケーションを動作させる情報処理装置であって、前記仮想マシンの設定言語に対応するフォントを設定する設定手段と、前記設定されたフォントに対応するフォントファイルを読み込み、当該フォントファイルのキャッシュへのポインタで構成されるフォントキャッシュを作成する作成手段と、前記フォントキャッシュを用いて、前記アプリケーションで用いるフォントを表示装置に表示させる制御手段と、前記仮想マシンの設定言語が変更された場合、前記作成手段で作成された前記フォントキャッシュを変更する変更手段と、有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、仮想マシン上でアプリケーションを動作させる情報処理装置であって、フォントの変更の際に、当該情報処理装置の負荷を抑えることが出来る。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置のハードウェア構成の一例を示す概略図である。
【図２】情報処理装置上に構築するシステム構成の一例を示す模式図である。
【図３】仮想マシンの構成を示す模式図である。
【図４】フォント設定ファイルにおける設定言語ごとの記載例を示す図である。
【図５】設定言語が日本語のときのフォントキャッシュを示す図である。
【図６】設定言語が中国語のときのフォントキャッシュを示す図である。
【図７】日本語と中国語のフォントの違いを示す図である。
【図８】実施形態１にかかる仮想マシンの起動処理のフローチャートである。
【図９】実施形態１にかかる文字の描画処理のフローチャートである。
【図１０】実施形態１にかかるフォントキャッシュの作成処理のフローチャートである。
【図１１】実施形態２にかかる設定言語の変更処理のフローチャートである。
【図１２】実施形態３にかかる文字の描画処理のフローチャートである。
【図１３】実施形態４にかかる仮想マシンの構成を示す模式図である。
【図１４】実施形態４にかかる外部機器の接続処理のフローチャートである。
【図１５】実施形態１にかかる設定言語の変更処理のフローチャートである。
【発明を実施するための形態】
【００１３】
以下、添付の図面を参照して、本発明の好適な実施形態を詳細に説明する。
【００１４】
（実施形態１）
図１は、一般的な情報処理装置１０１のハードウェア構成の一例を示す図である。図１に示すように情報処理装置１０１は、ハードウェア構成として、ＣＰＵ１１を含む。
【００１５】
ＣＰＵ１１が、記憶装置１３に記憶されている後述するアプリケーションやプログラム実行環境等の各々に対応するプログラムに基づき処理を行うことによって、後述する各機能、又はフローチャートを実現する。
【００１６】
また、ＣＰＵ１１には、バス１０を介して、入力装置１２、記憶装置１３、表示装置１４及び外部接続ＩＦ１５が接続されている。入力装置１２は、情報を入力するキーボード及び／又はマウスである。記憶装置１３は、例えば、ＲＯＭ、ＲＡＭ、ハードディスク装置等を含み、上述した各プログラム以外に、プログラムに基づく処理で用いられるデータ等を記憶する。表示装置１４は、画面等を表示するディスプレイである。外部接続ＩＦ１５は、ネットワークインタフェース、外部機器との各種接続インタフェースである。
【００１７】
尚、ＣＰＵ１１はプログラムを実行することで各種の手段として機能することが可能である。なお、ＣＰＵ１１と協調して動作するＡＳＩＣなどの制御回路がこれらの手段として機能してもよい。また、ＣＰＵ１１と情報処理装置１０１の動作を制御する制御回路との協調によってこれらの手段が実現されてもよい。また、ＣＰＵ１１は単一のものである必要はなく、複数であってもよい。この場合、複数のＣＰＵ１１は分散して処理を実行することが可能である。また、複数のＣＰＵ１１は単一のコンピュータに配置されていてもよいし、物理的に異なる複数のコンピュータに配置されていてもよい。なお、ＣＰＵ１１がプログラムを実行することで実現する手段が専用の回路によって実現されてもよい。
【００１８】
次に、情報処理装置１０１上に構築するシステム構成について、図２を用いて説明する。図２は、情報処理装置１０１のシステム構成の一例を示す図である。
【００１９】
オペレーティングシステム２０１は、システム全体の基盤となるソフトウェアである。仮想マシン２０２は、オペレーティングシステム２０１上のプロセスでありながら、自身の上でアプリケーションが動作する環境を提供するソフトウェアである。アプリケーション２０３は仮想マシン上２０２で実行されるプログラムである。
【００２０】
具体的に、本実施形態における仮想マシン２０２はＪＲＥ（Ｊａｖａ  Ｒｕｎｔｉｍｅ  Ｅｎｖｉｒｏｎｍｅｎｔ）とする。ＪＲＥとは、Ｊａｖａ（登録商標）言語で開発されたソフトウェアを実行するために必要なソフトウェアのセットである。ＪＲＥは、クラスライブラリ、ＪａｖａＶＭ（Ｊａｖａ言語にて記述されたアプリケーションを実行するためのソフトウェア）を含む。ＪＲＥは情報処理装置１０１に配置される。以降では、情報処理装置１０１を機器と記す。
【００２１】
仮想マシン２０２の具体的な構成を、図３を用いて説明する。図３は仮想マシン２０２が備える機能および関連するファイルを示す図である。以降の説明において、機器は中国語と日本語の２つの言語に対応しているとする。ただし、機器が３つ以上の言語に対応する場合でも同様である。
【００２２】
世界各国の文字の集合は、Ｕｎｉｃｏｄｅとして定義されている。フォントファイルは言語ごとに異なるファイルとなり、その言語の文字集合を網羅していることが一般的である。
【００２３】
図３では、機器が日本語用のフォントファイル３０７と中国語用のフォントファイル３０８を備えていることを示している。フォントファイルは、文字の形を表現するためのフォントデータで構成される。
【００２４】
日本語と中国語の文字集合について、日本語の一部の漢字と中国語の一部の漢字の間で、漢字に対応するＵｎｉｃｏｄｅ値は共通する。そのため、日本語フォントファイル３０７と中国語フォントファイル３０８は同一のＵｎｉｃｏｄｅ値に対応するフォントデータを備えている。しかし、日本語と中国語のフォントではフォントデータが異なるため、描画した文字の見栄えも異なる。図７に日本語と中国語のフォントの違いの一例を示す。中国語フォントファイル３０８ではひらがなも定義しているため、漢字だけでなくひらがなの描画結果も異なっている。
【００２５】
仮想マシン２０２は、設定言語管理手段３０２を備える。設定言語管理手段３０２は、仮想マシン２０２が表示する言語を設定する。また、仮想マシン２０２が表示する言語の設定を取得する。以降、仮想マシン２０２に設定されている言語を設定言語と記す。設定言語管理手段３０２が記憶する設定言語は、「仮想マシン２０２の起動時の設定言語」、「仮想マシン２０２に現在設定されている設定言語」、「フォントキャッシュ３０３を作成したときの設定言語」の３種類である。以降、単に設定言語と記載するときは、仮想マシン２０２に現在設定されている設定言語」を指す。
【００２６】
仮想マシン２０２は、５つの論理フォント（ｓｅｒｉｆ、ｓａｎｓｓｅｒｉｆ、ｍｏｎｏｓｐａｃｅｄ、ｄｉａｌｏｇ、ｄｉａｌｏｇｉｎｐｕｔ）を備える。各論理フォントは４つの標準スタイル（ｐｌａｉｎ、ｂｏｌｄ、ｉｔａｌｉｃ、ｂｏｌｄｉｔａｌｉｃ）を適用できる。論理フォントは、機器の実行環境に応じて追加することもできる。
【００２７】
フォント設定ファイル３０６は、ＪａｖａＶＭが標準で備えるフォント構成ファイルのことを指す。フォント設定ファイル３０６には、機器が備えるフォントファイルと各論理フォントおよび各スタイルの対応付けの設定が記載される。仮想マシン２０２は、フォント設定ファイル３０６の内容にもとづいたフォントの設定を行うためのフォント設定手段３０５を備える。
【００２８】
フォント設定ファイル３０６の記載例を図４に示す。１行目は、中国語のフォントファイルの場所を示している。［ｃｈｉｎｅｓｅ  ｆｏｎｔ  ｆｉｌｅ  ｎａｍｅ］は、中国語フォントファイル３０８のファイル名が入る。２行目の［ｊａｐａｎｅｓｅ  ｆｏｎｔ  ｆｉｌｅ  ｎａｍｅ］は、日本語フォントファイル３０７のファイル名が入る。３行目は、仮想マシン２０２に設定されているエンコーディングが”ｗｉｎｄｏｗｓ−３１ｊ”、かつ設定言語が”ｊａ”（日本語）であるときのフォントファイルの検索順を示している。３行目の設定によって、日本語フォントファイル３０７，中国語フォントファイル３０８の順でフォントデータを検索する。４行目は、エンコーディングが”ｗｉｎｄｏｗｓ−３１ｊ”、かつ設定言語が”ｚｈ”（中国語）であるときのフォントファイルの検索順を示している。４行目の設定によって、中国語フォントファイル３０８、日本語フォントファイル３０７の順でフォントデータを検索する。
【００２９】
フォントデータの検索は、フォントキャッシュ３０３に対して行う。フォントキャッシュ３０３は、仮想マシン２０２に設定されているエンコーディング、ロケール、国の組み合わせをキーとして生成される。このロケールは設定言語に依存する。つまり、このキーは仮想マシン２０２の設定言語に依存する。このキーはさらに、フォントキャッシュ３０３はスタイルごと、ファミリーごとに生成される。
【００３０】
このキーは「仮想マシン２０２の起動時の設定言語」にもとづいて作成されることが一般的であるが、本実施形態では「仮想マシン２０２に現在設定されている設定言語」にもとづいて作成する。
【００３１】
フォントキャッシュ３０３の実体はメモリ上のＪａｖａオブジェクトである。フォントキャッシュ３０３は、フォントファイルを読み込んで解析した結果であるファイルキャッシュへのポインタで構成される。ファイルキャッシュの実体はフォントキャッシュ作成手段３０４が管理する。仮想マシン２０２が終了するまで、ファイルキャッシュは削除されない。フォントキャッシュ３０３は、フォントの論理フォント名ごと、スタイルごとに作成される。
【００３２】
フォントキャッシュ３０３には複数のファイルキャッシュが含まれることが多い。複数のファイルキャッシュのデータが含まれるとき、フォントデータの検索順序はフォント設定ファイル３０６に記載したフォントファイルの検索順序となる。フォントデータの検索順序は設定言語によって異なるため、フォントキャッシュ３０３は設定言語によって異なるものになる。
【００３３】
図５に、設定言語が日本語のときのフォントキャッシュ３０３を示す。ファイルキャッシュＪＰ５０１は、日本語フォントファイル３０７を読み込んだキャッシュである。ファイルキャッシュＣＨ５０２は、中国語フォントファイル３０８を読み込んだキャッシュである。ファイルキャッシュＪＰ５０１とファイルキャッシュＣＨ５０２を複数のフォントキャッシュ３０３から共通して利用するために、フォントキャッシュ３０３はファイルキャッシュへのポインタで構成される。図５において、第一位ファイルキャッシュポインタ５０３は、ファイルキャッシュＪＰ５０１へのポインタである。第二位ファイルキャッシュポインタ５０４は、ファイルキャッシュＣＨ５０２へのポインタである。検索順位が高いものが優先されるため、図５のフォントキャッシュ３０３は、日本語、中国語の順でフォントデータを検索するように構成されている。
【００３４】
図６に、設定言語が中国語のときのフォントキャッシュ３０３を示す。構成要素は図５で説明したものと同様であるが、検索順は逆になっている。
【００３５】
仮想マシン２０２は、情報処理装置１０１に備わるフォントファイルを読み込んでフォントキャッシュ３０３を作成するためのフォントキャッシュ作成手段３０４を備える。前述のとおり、フォントキャッシュ作成手段３０４は、ファイルキャッシュの作成と管理も行う。
【００３６】
仮想マシン２０２は、アプリケーション２０３の描画命令に従って文字を描画するためのフォント描画手段３０１を備える。フォント描画手段３０１は、フォントキャッシュ３０３からフォントデータを取得して文字を描画する。
【００３７】
文字の描画では、描画する文字のＵｎｉｃｏｄｅ値をキーとしてフォントデータを検索する。ファイルキャッシュＪＰ５０１とファイルキャッシュＣＨ５０２は、共通のＵｎｉｃｏｄｅ値に対応するフォントデータをもつため、検索で最初に見つかったフォントデータが描画される。
【００３８】
フォント設定ファイル３０６には、設定言語ごとのフォントの設定を記載できる。ＪａｖａＶＭは、起動時にフォント設定ファイル３０６を読み込んだ後、起動時の設定言語に対応する設定を適用し続ける。
【００３９】
しかし、仮想マシン２０２は起動後に設定言語を変更することがある。このとき、対応する言語のフォントの設定に合わせて、表示するフォントも変更すべきである。しかし、一般的なＪａｖａＶＭは、起動後の設定言語の変更に応じたフォントの変更を行えない。
【００４０】
そこで、設定言語の変更に応じてフォントを変更する仕組みが必要となる。この仕組みを実現する手順は、仮想マシン２０２の起動処理、設定言語の変更処理、文字の描画処理からなる。
【００４１】
初めに、仮想マシン２０２の起動処理について、図８を用いて説明する。図８は仮想マシン２０２の起動処理のフローチャートである。
【００４２】
仮想マシン２０２は起動を開始すると、フォント設定手段３０５によってフォント設定ファイル３０６の読み込みを行う（Ｓ８０１）。読み込んだ結果は図４に示した内容であり、フォント設定手段３０５はこの結果を仮想マシン２０２が終了するまで記憶している。
【００４３】
そして、仮想マシン２０２は、設定言語管理手段３０２によって現在の設定言語を記憶する（Ｓ８０２）。仮想マシン２０２の起動時の設定言語の指定方法は、起動時の引数で指定する方法が一般的である。設定言語管理手段３０２は、引数を解析して設定言語を取得し、「仮想マシン２０２の起動時の設定言語」として記憶する。また、「仮想マシン２０２に現在設定されている設定言語」としても記憶する。ここでは、設定言語が日本語であったとする。
【００４４】
そして、仮想マシン２０２はフォント設定手段３０５を用いて、フォント設定ファイル３０６に列挙してある設定のうちから現在の設定言語に対応する設定を選択して適用することで、フォント設定の初期化を行う（Ｓ８０３）。設定の選択は、仮想マシン２０２に設定されているエンコーディングと「仮想マシン２０２の起動時の設定言語」を参照して行う。ステップＳ８０２では設定言語が日本語であり、仮想マシン２０２に設定されているエンコーディングはｗｉｎｄｏｗｓ−３１ｊであった例で説明する。このとき、フォント設定ファイル３０６の３行目の設定が選択される。
【００４５】
フォント設定ファイル３０６の３行目の設定では、日本語フォントファイル３０７と中国語フォントファイル３０８を読み込むという設定がなされている。そこで、仮想マシン２０２はフォントキャッシュ作成手段３０４によって日本語フォントファイル３０７と中国語フォントファイル３０８を読み込む（Ｓ８０４）。
【００４６】
フォントファイルを読み込むと、フォントキャッシュ作成手段３０４はファイルキャッシュＪＰ５０１とファイルキャッシュＣＨ５０２を作成する（Ｓ８０５）。
【００４７】
以上、フォント設定ファイル３０６を読み込んで仮想マシン２０２が起動する処理について説明した。
【００４８】
次に、設定言語の変更処理について、図１５を用いて説明する。図１５は仮想マシン２０２に設定する言語を変更する処理のフローチャートである。
【００４９】
仮想マシン２０２が起動後に、ユーザはアプリケーション２０３を用いて設定する言語を変更する。ユーザがアプリケーション２０３を操作し、設定したい言語を指定する。すると、アプリケーション２０３は、設定する言語を指定して仮想マシン２０２が備える設定用ＡＰＩを実行する（Ｓ１５０１）。
【００５０】
言語を設定するＡＰＩが実行されると、設定言語管理手段３０２が記憶している「仮想マシン２０２に現在設定されている設定言語」が更新される（Ｓ１５０２）。
【００５１】
以上、仮想マシン２０２の設定言語の変更処理について説明した。
【００５２】
次に、起動完了後の設定言語の変更に対応して表示するフォントを切り替えるための文字の描画処理について、図９を用いて説明する。図９は、実施形態１にかかる文字の描画処理のフローチャートである。
【００５３】
アプリケーション２０３が文字の描画命令を実行するには、フォントオブジェクトのインスタンス（以降、フォントインスタンスと記載）を作成しておく必要がある。フォントインスタンスの作成では、フォントのファミリー、フォントのサイズ、フォントのスタイルを指定する。フォントのファミリーには、論理フォントの名前を指定する。
【００５４】
このフォントインスタンスを引数として仮想マシン２０２が提供する文字列描画ＡＰＩを実行することで、フォント描画手段３０１による文字の描画が開始される。引数としてフォントインスタンスを渡すことで、フォント描画手段３０１にフォントファミリーとスタイルを指定する（Ｓ９０１）。すると設定言語管理手段３０２は、「フォントキャッシュ３０３を作成した時の設定言語」と現在の設定言語が同じであるかを確認する（Ｓ９０２）。
【００５５】
設定言語が同じであれば、描画しようとしているフォントファミリーとスタイルに対応するフォントキャッシュ３０３があるか確認する（Ｓ９０５）。フォントキャッシュ３０３がなければ、フォントキャッシュ３０３の作成処理を行う（Ｓ９０４）。フォントキャッシュ３０３の作成処理の詳細については後述するが、仮想マシン２０２が起動した時の設定言語が日本語であり、起動後に設定言語が変更されていなければ、作成されるフォントキャッシュ３０３は図５のようになる。
【００５６】
ステップＳ９０５で作成済みのフォントキャッシュ３０３があった場合、あるいはステップＳ９０４の後に、フォント描画手段３０１はフォントキャッシュ３０３から描画する文字に対応するフォントデータを取得する（Ｓ９０６）。そして、取得したフォントデータを用いて文字を描画する（Ｓ９０７）。
【００５７】
仮想マシン２０２が起動した時の設定言語が日本語であり、その後に設定言語が中国語に変更されたとすると、ステップＳ９０２において設定言語が異なると判定される。すると、フォントキャッシュ作成手段３０４は、既存のフォントキャッシュ３０３を削除する（Ｓ９０３）。そして、ステップＳ９０４以降の処理を実行する。この結果、再作成されるフォントキャッシュ３０３は、図６のようになる。尚、フォントキャッシュ３０３の一部を変更することによって、図６のようなフォントキャッシュ３０３を再作成してもよい。
【００５８】
以上、文字の描画処理について説明した。次に、フォントキャッシュ作成処理の詳細について、図１０を用いて説明する。図１０は、実施形態１にかかるフォントキャッシュの作成処理のフローチャートである。
【００５９】
フォントキャッシュ作成手段３０４はフォント設定手段３０５によって、仮想マシン２０２に設定されているエンコーディングと設定言語に対応するフォントの設定を取得する（Ｓ１００１）。具体的な設定内容は図４で示したように、フォントの検索順と、検索するフォントファイルの名前である。
【００６０】
そして、フォントキャッシュ作成手段３０４は、ステップＳ９０１で指定されたフォントのファミリーとスタイルに対応するフォントキャッシュ３０３を作成する（Ｓ１００２）。
【００６１】
そして、フォントキャッシュ作成手段３０４は、設定されているフォントファイルに対応するファイルキャッシュがすべてフォントキャッシュ３０３に含まれているかを確認する（Ｓ１００３）。含まれていなければ、含まれていないフォントファイルのなかで最も検索順位の高いフォントファイルを選択する（Ｓ１００４）。
【００６２】
そして、フォントキャッシュ作成手段３０４は、選択したフォントファイルに対応するファイルキャッシュが、すでに存在するか確認する（Ｓ１００５）。図６の説明で述べたように、フォントキャッシュ３０３はファイルキャッシュへのポインタの集合である。そのため、ステップＳ１００５では、別のフォントキャッシュ用にすでに作成済みのファイルキャッシュを利用できるかを確認する。
【００６３】
ステップＳ１００５においてファイルキャッシュが存在する場合、存在するファイルキャッシュをフォントキャッシュ３０３に登録する（Ｓ１００８）。登録は、存在するファイルキャッシュへのポインタを作成することで行う。
【００６４】
ステップＳ１００５においてファイルキャッシュが存在しない場合、選択したフォントファイルに対応するファイルキャッシュを作成する（Ｓ１００６）。そして、作成したファイルキャッシュをフォントキャッシュ３０３に登録する（Ｓ１００７）。ステップＳ１００７が完了すると、ステップＳ１００３の処理を再度実行する。ステップＳ１００３を実行するたびに、フォントキャッシュに未登録のフォントファイルで最も優先度が高いものについて、そのフォントファイルがフォントキャッシュ３０３に登録済みかが確認されていく。
【００６５】
ステップＳ１００３において、ファイルキャッシュがすべてフォントキャッシュ３０３に含まれていれば、設定言語管理手段３０２が記憶する「フォントキャッシュ３０３を作成したときの設定言語」を、現在の設定言語に更新する（Ｓ１００９）。
【００６６】
以上、設定言語の変更に応じて描画するフォントを変更する方法について説明した。設定言語が切り替わった後、最初の文字描画時にフォントキャッシュ３０３を更新することで、設定言語に応じたフォントを仮想マシン２０２が描画することができる。また、フォントキャッシュ３０３の更新においてファイルキャッシュを共通利用することで、フォントファイルの再読み込みを抑制し、描画するフォントの変更コストを削減している。
【００６７】
（実施形態２）
実施形態１では、設定言語の変更に応じて描画するフォントを変更する方法について説明した。しかし、実施形態１では，新たに描画される文字のフォントは変更されるものの，既に描画済みの文字のフォントが変更されるわけではない。設定言語の変更においては、すでに描画済みで画面に表示中の文字についても、変更後のフォントで再描画しなければならない。
【００６８】
そこで、設定言語の変更によって表示中の文字の再描画まで行う方法を、図１１を用いて説明する。図１１は、設定言語の変更処理を示すフローチャートである。
【００６９】
仮想マシン２０２は、画面出力のためにウィンドウシステムを使用している。本手順では、ウィンドウシステムをＸ  Ｗｉｎｄｏｗ  Ｓｙｓｔｅｍ（登録商標）とする。ウィンドウシステムにおいて、表示中のウィンドウＡの前面に新しいウィンドウＢを表示後、ウィンドウＢを非表示にすると、ウィンドウＡが再描画される。この再描画は、仮想マシン２０２への描画指示の発行によって行われる。この描画指示の発行はウィンドウシステムが行うが、処理自体はアプリケーション２０３による描画命令と同じである。
【００７０】
すでに仮想マシン２０２が文字を含む画面を機器に表示中の状態から、ユーザが設定言語を変更する例で説明する。表示中の画面のウィンドウを、ウィンドウＣとする。
【００７１】
設定言語の変更では、はじめにユーザが機器を操作して、言語設定画面を開く（Ｓ１１０１）。言語設定画面については図示しないが、とくに制限はない。すると、言語設定画面が表示される（Ｓ１１０２）。言語設定画面は、ウィンドウＣを表示していた画面領域を覆うように表示されるウィンドウ（以降、ウィンドウＤと記す）である。
【００７２】
そして、ウィンドウＤ上のＵＩを用いて、ユーザが設定言語を選択する（Ｓ１１０３）。すると、「仮想マシン２０２に現在設定されている設定言語」として、ユーザが選択した設定言語が設定される（Ｓ１１０４）。
【００７３】
そして、設定言語を選択する画面のウィンドウＤを、機器が非表示にする（Ｓ１１０５）。すると、ウィンドウＣが前面になり、言語設定画面を開く前に表示していたウィンドウＣが再描画されることとなる（Ｓ１１０６）。この再描画は、アプリケーション２０３による文字の描画命令と同じ処理で行われる。そのため、図９で示した文字の描画処理が実行される（Ｓ１１０７）。
【００７４】
なお、上記の説明はウィンドウＣの再描画についてのみ説明したが、設定言語を変更後に再描画されるウィンドウはすべて変更後のフォントで再描画される。これは、他のウィンドウの背面に隠れて非表示になったウィンドウについて、前面に出て表示されるタイミングで、ウィンドウシステムがそのウィンドウを再描画するためである。
【００７５】
以上、設定言語の変更にともない、すでに表示中であった文字のフォントを変更する処理について説明した。ウィンドウシステムの機能を利用することで、仮想マシン２０２に複雑な仕組みを追加せずにフォントの変更を実現している。
【００７６】
（実施形態３）
仮想マシン２０２はファイルキャッシュを削除することはないため、設定言語が日本語と中国語で交互に切り替わる場合でも、フォントファイルの再読み込みのコストが削減されている。
【００７７】
しかし、使用できるメモリが枯渇しやすい実行環境では、フォントファイルの再読み込みを行う可能性が生じるとしても、空きメモリを増やすべきである。
【００７８】
そこで、設定言語の変更時にファイルキャッシュを削除する方法を、実施形態３として説明する。図１２に文字の描画処理のフローチャートを示す。
【００７９】
図１２のステップＳ１２０１、ステップＳ１２０２、ステップＳ１２０３は、ステップＳ９０１，ステップＳ９０２、ステップＳ９０３と同様である。また、ステップＳ１２０４、ステップＳ１２０５、ステップＳ１２０６、ステップＳ１２０７は、ステップＳ９０４、ステップＳ９０５、ステップＳ９０６、ステップＳ９０７と同様である。
【００８０】
本手順ではステップＳ１２０３のフォントキャッシュの削除の後に、さらにすべてのファイルキャッシュを削除する（Ｓ１２０８）。これにより、設定言語の変更前と変更後でファイルキャッシュの流用ができなくなる代わりに、使用するメモリ量を削減することができる。以上、メモリ使用量を削減するための手順について説明した。
【００８１】
（実施形態４）
仮想マシン２０２が表示すべきフォントを変更すべきタイミングは、設定言語の変更だけではない。表示装置を備える外部機器と、仮想マシン２０２が動作している機器が接続された時に、外部機器の表示装置に仮想マシン２０２が画面を描画する例で説明する。
【００８２】
二人のユーザがそれぞれ、仮想マシン２０２が動作している機器の表示装置と、外部機器の表示装置を用いて操作する例を考える。仮想マシン２０２が動作している機器の表示装置を利用するユーザは日本語フォントを、外部機器の表示装置を利用するユーザが中国語フォントを使いたいとする。しかし、機器の言語設定は共通であるため、設定言語は日本語である。ここで、外部機器用のフォントの設定として、日本語のときでも中国語フォントを優先するように設定できれば、設定言語が日本語であっても中国語フォントの漢字を外部機器の表示装置に表示できる。
【００８３】
そこで、外部機器の接続時にフォントを切り替える方法を、実施形態４として説明する。図１３は、仮想マシンの構成を示す模式図である。図３との違いは、外部機器用フォント設定ファイル１３０９の存在である。
【００８４】
外部機器用フォント設定ファイル１３０９には外部機器が備える画面に合わせたフォント設定を記述する。このファイルは、外部機器と機器が接続されたときに外部機器から機器に送信してもよいし、機器があらかじめシステム中に備えていてもよい。ここでは、外部機器用フォント設定ファイル１３０９とフォント設定ファイル１３０６の間で、３行目の右辺が異なるとする。外部機器用フォント設定ファイル１３０９は”ｃｈｉｎｅｓｅ−ｇｂ１８０３０，ｊａｐａｎｅｓｅ”であるとする。一方、フォント設定ファイル１３０６は”ｊａｐａｎｓｅ，ｃｈｉｎｅｓｅ−ｇｂ１８０３０”であるとする。フォント設定手段１３０５は、外部機器用フォント設定ファイル１３０９を読み込んで、外部機器用のフォント設定を記憶する。
【００８５】
図１４を用いて、外部機器の接続に応じて表示するフォントを変更する方法を説明する。図１４は、外部機器の接続処理のフローチャートである。
【００８６】
外部機器が接続されると、仮想マシン２０２は外部機器の接続を検出する（Ｓ１４０１）。検出の方法としては、仮想マシン２０２に設けるＡＰＩをＯＳ２０１が実行する方法があるが、特に制限はない。外部機器の接続によって、フォント設定手段１３０５は外部機器用フォント設定ファイル１３０９を読み込んで、外部機器用のフォント設定を記憶する（Ｓ１４０２）。
【００８７】
そして、外部機器用のフォント設定にもとづいてフォントキャッシュ３０３を作成する（Ｓ１４０３）。このとき、仮想マシン２０２中には機器用のフォントキャッシュ３０３と外部機器用のフォントキャッシュ３０３の２種類が存在することになる。これら２種類のフォントキャッシュ３０３は独立して管理される。実施形態１では、フォントキャッシュ３０３は仮想マシン２０２に設定されているエンコーディング、ロケール、国の組み合わせをキーとして生成した。実施形態４でフォントキャッシュ３０３を独立して管理する容易な方法は、キーに機器のＩＤ、または外部機器のＩＤを組み合わせることである。つまり、実施形態１では、「キー＝エンコーディング＋ロケール（設定言語）＋国」であった。一方、実施形態４では、キー＝「エンコーディング＋ロケール（設定言語）＋国＋（機器のＩＤまたは外部機器のＩＤ）」となる。
【００８８】
ステップＳ１４０３の処理について、フォントキャッシュ３０３を管理するキーが異なる以外は、図１０のフォントキャッシュ作成処理と同一の処理である。
【００８９】
フォントキャッシュ３０３の作成後、ステップＳ９０６と同様にフォントデータを取得し（Ｓ１４０４）、ステップＳ９０７と同様に文字を描画する（Ｓ１４０５）。
【００９０】
以上、外部機器の接続に合わせて表示するフォントを変える方法について説明した。
【００９１】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
2017215801.tif 000003
【図２】
2017215801.tif 000004
【図３】
2017215801.tif 000005
【図４】
2017215801.tif 000006
【図５】
2017215801.tif 000007
【図６】
2017215801.tif 000008
【図７】
2017215801.tif 000009
【図８】
2017215801.tif 000010
【図９】
2017215801.tif 000011
【図１０】
2017215801.tif 000012
【図１１】
2017215801.tif 000013
【図１２】
2017215801.tif 000014
【図１３】
2017215801.tif 000015
【図１４】
2017215801.tif 000016
【図１５】
2017215801.tif 000017