図1は、本発明の実施例に該当する融合機101を表す。図1の融合機101は、種々のハードウェア111と、種々のソフトウェア112と、融合機起動部113により構成される。図1の融合機101は、コピーやプリンタやスキャナやファクシミリとして機能することができる。
融合機101のハードウェア111としては、撮像部121と、印刷部122と、その他のハードウェア123が存在する。
撮像部121は、原稿から画像(画像データ)を読み取るためのハードウェアであり、コピーやスキャナやファクシミリとして機能する際に使用される。撮像部121は、白黒画像用の物でもカラー画像用の物でもよい。撮像部121は、原稿に関する機構として、原稿セット部等を備える。
印刷部122は、画像(画像データ)を印刷用紙等の印刷媒体に印刷するためのハードウェアであり、コピーやプリンタやファクシミリとして機能する際に使用される。印刷部122は、白黒画像用の物でもカラー画像用の物でもよい。印刷部122は、ここでは電子写真方式を採用しており、感光体、帯電機、露光機、現像機、転写機、定着機等を備える。印刷部122は、印刷用紙等に関する機構として、給紙部、排紙部、印刷用紙等搬送機構等を備える。
その他のハードウェア123については、図2において説明する。
融合機101のソフトウェア112としては、種々のアプリケーション131と、種々のプラットフォーム132が存在する。これらのプログラムは、UNIX(登録商標)等のOS(オペレーティングシステム)によりプロセス単位で並列的に実行される。
アプリケーション131は、コピーやプリンタやスキャナやファクシミリ等の機能に固有な情報処理を実行するためのソフトウェアである。アプリケーション131としては、コピー用のアプリケーションであるコピーアプリ141と、プリンタ用のアプリケーションであるプリンタアプリ142と、スキャナ用のアプリケーションであるスキャナアプリ143と、ファクシミリ用のアプリケーションであるファクシミリアプリ144と、ネットワークファイル用のアプリケーションであるネットワークファイルアプリ145が存在する。ネットワークファイルアプリ145は、HTML文書等の閲覧用のWebブラウザや、HTML文書等の配信用のWebサーバソフトにより構成される。
アプリケーション131は、専用のSDK(ソフトウェア開発キット)を使用して開発することができる。SDKを使用して開発したアプリケーション131をSDKアプリと呼ぶ。専用のSDKとしては、C言語でアプリケーション131を開発するための「CSDK」や、Java(登録商標)言語でアプリケーション131を開発するための「JSDK」が提供される。CSDKを使用して開発したアプリケーション131を「CSDKアプリ」と呼び、JSDKを使用して開発したアプリケーション131を「JSDKアプリ」と呼ぶ。図1の融合機101にも、CSDKアプリ146と、JSDKアプリ147が存在する。図1の融合機101にはさらに、Java(登録商標)言語で記述されたJSDKアプリ147とC言語で記述された他のソフトウェア112との仲介を行うソフトウェア112として、JSDKプラットフォーム148が存在する。
プラットフォーム132は、アプリケーション131からの処理要求に関する情報処理を実行するためのソフトウェアである。アプリケーション131からの処理要求の受信には、予め定義されている関数により処理要求を受信するアプリケーションプログラムインタフェース(API)133を利用して、要求内容の実施には、エンジンインタフェース134を利用する。プラットフォーム132としては、種々のコントロールサービス151と、システムリソースマネージャ152と、種々のハンドラ153が存在する。
コントロールサービス151は、アプリケーション131からの処理要求を解釈して、解釈結果に応じてハードウェア111の獲得要求を発生させる。コントロールサービス151としては、ネットワークコントロールサービス(NCS)161と、ファクシミリコントロールサービス(FCS)162と、デリバリコントロールサービス(DCS)163と、エンジンコントロールサービス(ECS)164と、メモリコントロールサービス(MCS)165と、オペレーションパネルコントロールサービス(OCS)166と、サーティフィケーションコントロールサービス(CCS)167と、ユーザディレクトリコントロールサービス(UCS)168と、システムコントロールサービス(SCS)169が存在する。
NCS161のプロセスは、ネットワーク等を介してデータ通信を行うための仲介を行う。FCS162のプロセスは、ファクシミリとして画像データ通信・画像データ読取・画像データ印刷等を行うためのAPIを提供する。DCS163のプロセスは、融合機101に蓄積された文書データの配信に関する制御を行う。ECS164のプロセスは、撮像部121や印刷部122等のエンジン部に関する制御を行う。MCS165のプロセスは、画像データ記憶・画像データ処理等のメモリやハードディスクドライブに関する制御を行う。OCS166のプロセスは、オペレーションパネルに関する制御を行う。CCS167のプロセスは、認証処理や課金処理に関する制御を行う。UCS168のプロセスは、ユーザ情報の管理に関する制御を行う。SCS169のプロセスは、システムの管理に関する制御を行う。
システムリソースマネージャ(SRM)152は、ハードウェア111の獲得要求を調停して、調停結果に応じて要求内容を実施するための制御を行う。詳細に言うと、SRM152のプロセスは、獲得要求に係るハードウェア111が利用可能か否か(他の獲得要求と競合しないか否か)を判定して、利用可能である場合にはその旨をコントロールサービス151の各プロセスに通知する。さらに、獲得要求に係るハードウェア111の利用スケジュールを作成して、作成結果に応じて要求内容を実施するための制御を行う。
ハンドラ153は、調停結果に応じてハードウェア111を管理する。ハンドラ153としては、ファクシミリコントロールユニットハンドラ(FCUH)171と、イメージメモリハンドラ(IMH)172が存在する。FCUH171は、ファクシミリコントロールユニットを管理する。IMH172は、各プロセスにメモリを割り振り、各プロセスに割り振ったメモリを管理する。
アプリケーション131とプラットフォーム132の仲介を行うソフトウェア112として、仮想アプリケーションサービス(VAS)135が存在する。VAS135は、アプリケーション131をクライアントとするサーバプロセスとして動作すると共に、プラットフォーム132をサーバとするクライアントプロセスとして動作する。VAS135は、アプリケーション131から見てプラットフォーム132を隠蔽するラッピング機能を備え、プラットフォーム132のバージョンアップに伴うバージョン差を吸収する役割等を担う。
融合機起動部113は、融合機101の電源投入時に最初に実行される。これにより、UNIX(登録商標)等のOSが起動され、アプリケーション131やプラットフォーム132が起動される。これらのプログラムは、ハードディスクドライブやメモリカードに蓄積されており、ハードディスクドライブやメモリカードから再生されて、メモリに起動されることになる。
図2は、図1の融合機101に係るハードウェア構成図である。融合機101のハードウェア111としては、コントローラ201と、オペレーションパネル202と、ファクシミリコントロールユニット(FCU)203と、撮像部121と、印刷部122が存在する。撮像部121と印刷部122を除く各構成要素が、図1の「その他のハードウェア123」に該当する。
コントローラ201は、CPU211と、ASIC212と、NB(ノースブリッジ)221と、SB(サウスブリッジ)222と、MEM−P(システムメモリ)231と、MEM−C(ローカルメモリ)232と、HDD(ハードディスクドライブ)233と、メモリカードスロット234と、NIC(ネットワークインタフェースコントローラ)241と、USBデバイス242と、IEEE1394デバイス243と、セントロニクスデバイス244により構成される。
CPU211は、種々の情報処理を実行するためのICであり、アプリケーション131やプラットフォーム132をUNIX(登録商標)等のOSによりプロセス単位で並列的に実行する。ASIC212は、画像処理用のICである。NB221は、CPU211とASIC212を接続するためのブリッジである。SB222は、NB221と周辺機器等を接続するためのブリッジである。ASIC212とNB221は、AGP(Accelerated Graphics Port)を介して接続されている。
MEM−P231は、NB221に接続されたメモリである。MEM−C232は、ASIC212に接続されたメモリである。HDD233は、ASIC212に接続されたストレージであり、画像データ蓄積・文書データ蓄積・プログラム蓄積・フォントデータ蓄積・フォームデータ蓄積等を行うために使用される。メモリカードスロット234は、SB222に接続されたスロットであり、メモリカード235をセット(挿入)するために使用される。
NIC241は、ネットワーク等を介してMACアドレス等を使用したデータ通信を行うためのコントローラである。USBデバイス242は、USB規格に準拠したシリアルポートを提供するためのデバイスである。IEEE1394デバイス243は、IEEE1394規格に準拠したシリアルポートを提供するためのデバイスである。セントロニクスデバイス244は、セントロニクス仕様に準拠したパラレルポートを提供するためのデバイスである。NIC241と、USBデバイス242と、IEEE1394デバイス243と、セントロニクスデバイス244は、PCI(Peripheral Component Interconect)バスを介してNB221とSB222に接続されている。
オペレーションパネル202は、オペレータが融合機101に入力を行うためのハードウェア(操作部)であると共に、オペレータが融合機101から出力を得るためのハードウェア(表示部)である。オペレーションパネル202は、ASIC212に接続されている。FCU203と、撮像部121と、印刷部122は、PCI(Peripheral Component Interconect)バスを介してASIC212に接続されている。
図3は、図1の融合機101に係る外観図である。図3には、撮像部121の位置と、印刷部122の位置と、オペレーションパネル202の位置が図示されている。図3にはまた、原稿をセットするための原稿セット部301と、印刷用紙等の給紙先となる給紙部302と、印刷用紙等の排紙先となる排紙部303が図示されている。原稿セット部301は、撮像部121の構成要素であり、給紙部302と排紙部303は、印刷部122の構成要素である。
オペレーションパネル202は、図4のように、タッチパネル311と、テンキー312と、スタートボタン313と、リセットボタン314と、機能キー315と、初期設定ボタン316により構成される。
タッチパネル311は、タッチ操作で入力を行うためのハードウェア(タッチ操作部)であると共に、画面表示で出力を得るためのハードウェア(画面表示部)である。テンキー312は、キー操作で数字入力を行うためのハードウェアである。スタートボタン313は、ボタン操作でスタート操作を行うためのハードウェアである。リセットボタン314は、ボタン操作でリセット操作を行うためのハードウェアである。機能キー315は、キー操作でCSDK146による操作画面やJSDK147による操作画面を表示させるためのハードウェアである。初期設定ボタン316は、ボタン操作で初期設定画面を表示させるためのハードウェアである。
融合機101は、原稿セット部301に原稿がセットされている場合、スタートボタン313が押されることで、撮像部121によりその原稿から画像を読み取る。融合機101は、コピーとして機能する場合、印刷部122によりその画像を印刷用紙等に印刷することになり、ファクシミリとして機能する場合、FCU203やNIC241によりその画像を電話回線やネットワーク等を介して他の機器に送信することになる。印刷用紙等の給紙先は給紙部302であり、印刷用紙等の排紙先は排紙部303である。
原稿セット部301は、ADF(自動原稿搬送装置)321と、フラットベッド322と、フラットベッドカバー323により構成される。給紙部302は、4個の給紙トレイと1個の手差しトレイにより構成される。排紙部303は、1個の排紙トレイにより構成される。
ADF321には、複数枚の原稿を重ねてセットすることができる。融合機101は、ADF321に原稿がセットされている場合、スタートボタン313が押されることで、撮像部121によりその原稿から画像を読み取る。詳細に言うと、ADF321に複数枚の原稿が重ねてセットされている場合、スタートボタン313が押されることで、ADF321が、図3の矢印のような経路で複数枚の原稿を1枚ずつ搬送し、撮像部121が、図3の矢印のような経路で1枚ずつ搬送される原稿から画像を読み取る。
フラットベッド322には、原稿を下向きにセットする。融合機101は、フラットベッド322に原稿がセットされている場合、スタートボタン313が押されることで、撮像部121によりその原稿から画像を読み取る。詳細に言うと、フラットベッド322に原稿が下向きにセットされている場合、スタートボタン313が押されることで、撮像部121が、透明なフラットベッド322を介して対面する原稿から画像を読み取る。
(JSDK)
図5は、図1のJSDKアプリ147とJSDKプラットフォーム148のクラス図である。JSDKアプリ147とJSDKプラットフォーム148は、全体で1プロセスとして、同一プロセス上で実行される。JSDKアプリ147とJSDKプラットフォーム148中の各ブロックは、それぞれこの1プロセス上のスレッドとして、スレッド単位で並列的に実行(マルチスレッド)される。JSDKアプリ147とJSDKプラットフォーム148は、Java(登録商標)コンパイラによりソースコードからバイトコードに一括翻訳されており、Java(登録商標)仮想マシンにより逐次実行される。JSDKアプリ147とJSDKプラットフォーム148は、Java(登録商標) 2 Micro EditionのPersonal Basis Profileをベースとする実装となっている。
JSDKアプリ147としては、ユーザアプリ501と、JSDK GUI Manager511と、Task Bar Manager512等が存在する。
ユーザアプリ501は、融合機101のユーザ(例えばベンダ)がJSDKを使用して開発したJSDKアプリである。JSDK GUI Manager511は、他のJSDKアプリ(ユーザアプリ501等)を操作対象とする操作画面の表示等を行うJSDKアプリである。Task Bar Manager512は、他のJSDKアプリ(ユーザアプリ501等)を操作対象とするタスクバーの表示等を行うJSDKアプリである。
ユーザアプリ501はここでは、スタンドアロンアプリケーションやアプレットと並ぶJava(登録商標)アプリケーションであるXletである。JSDK GUI Manager511とTask Bar Manager512はここでは、独自の拡張を施したXlet(XletEx)である。
JSDKプラットフォーム148には、JSDK Main521と、JSDK Environment522と、Locale Manager523と、Xlet Manager531と、Multi Xlet Manager532と、JSDK Manager533と、Send Manager541と、Event Manager542と、System Event Manager543と、Panel Manager544と、Install Manager545と、Server/Client Manager546等のクラスが存在する。
JSDK Main521は、JSDKシステムの起動設定を行うクラスである。JSDK Environment522は、JSDKシステムの起動環境設定を行うクラスである。Locale Manager523は、国際化対応(言語指定)を行うクラスである。
Xlet Manager531は、1対1でXletのライフサイクルを管理するクラスである。ここでは、5個のXletのライフサイクルが1対1で5個のXlet Manager531によって管理される。Multi Xlet Manager532は、全てのXlet Manager531のライフサイクルを管理するクラスである。ここでは、5個のXlet Manager531のライフサイクルが全て1個のMulti Xlet Manager532によって管理される。JSDK Manager533は、JSDKシステム全体のライフサイクルを管理するクラスである。例えば、Multi Xlet Manager532,Send Manager541,Event Manager542,System Event Manager543,Panel Manager544,Install Manager545,Server/Client Manager546のライフサイクルが、JSDK Manager533によって管理される。
System Event Manager543は、図1のプラットフォーム132からのシステムイベント(電力モード等)の管理を行うクラスである。Panel Manager544は、1個のXletがオペレーションパネル202の画面を占有する際の調停等を行うクラスである。Install Manager545は、SDcardやWebからのインストールやアンインストールの管理を行うクラスである。
図5のJSDKシステムでは、APIとして、JSDK API551とJSDK API552が利用される。なお、XletとXletExの差異として、オブジェクトにアクセスするのにJSDK API551の利用とJSDKプラットフォーム148へのアクセスが可能である点が挙げられる。図1の融合機101にはさらに、図5のJSDKシステムに係る要素として、C言語とJava(登録商標)言語のインタフェースとなるJSDK Session553とNative JSDK Session554や、JSDKアプリ147とJSDKプラットフォーム148を実行するためJava(登録商標)仮想マシンであるCVM555等が存在する。
ここで、Panel Manager544について説明する。Panel Manager544は、JSDKアプリ147が融合機101の画面(タッチパネル311)に描画するために融合機101のメモリ(MEM−P231やMEM−C232)上に確保している描画データの管理を行う。OCS166は、プロセス単位での描画データの管理を前提としており、JSDKプラットフォーム148が、スレッド単位での描画データの管理を行う必要があるからである。JSDKアプリ147の描画データの例としては、JSDKアプリ147のウィンドウ,当該ウィンドウ内のメッセージ,当該ウィンドウ内のボタン,当該ウィンドウ内のアイコン等が挙げられる。
Panel Manager544は、以下のような描画情報管理を行う。1)融合機101の画面を占有するJSDKアプリ147の描画データをメモリ上に反映させ、融合機101の画面を占有しないJSDKアプリ147の描画データをメモリ上から削除するような描画情報管理。2)上記のウィンドウの表示枚数の管理。3)上記のウィンドウの表示順番の管理。4)上記ウィンドウのハイライト表示の管理。5)融合機101の電源のON/OFFに伴う再描画処理のための描画情報管理。
上記の1)は、上記のメモリの節約等を目的として実行される。融合機101の画面を占有するJSDKアプリ147と占有しないJSDKアプリ147とがメモリを消費するとメモリが不足するおそれがあるため、JSDKアプリ147には意識させることなく、融合機101の画面を占有しないJSDKアプリ147の描画データをメモリ上から削除するようにしたのである。上記の2)は主に、上記のウィンドウの表示枚数がメモリ上に確保可能なウィンドウの最大許容枚数を越えることを防ぐために実行される。上記の3)は主に、メモリ上から削除したウィンドウを再びメモリ上に反映させる際にウィンドウの表示順番を復元するために実行される。上記の4)は主に、メモリ上から削除したウィンドウを再びメモリ上に反映させる際にウィンドウのハイライト表示を復元するために実行される。上記の5)は、アイコンローディング等を目的として実行される。
図21は、融合機101の画面を占有するJSDKアプリ147を切り替える切替処理について説明するための図である。図21Aは、AWTに準拠したCVM555上の描画データ(ウィンドウ)のツリー構造を表す。ウィンドウ611は、JSDK GUI Manager511のウィンドウである。ウィンドウ611Aが親ウィンドウ(rootウィンドウ)であり、ウィンドウ611Bが子ウィンドウである。ウィンドウ612は、Task Bar Manager512のウィンドウである。ウィンドウ612Aが親ウィンドウ(rootウィンドウ)である。ウィンドウ601−1は、ユーザアプリ501(1)のウィンドウである。ウィンドウ601−1Aが親ウィンドウ(rootウィンドウ)であり、ウィンドウ601−1B,C,Dが子ウィンドウである。ウィンドウ601−2は、ユーザアプリ501(2)のウィンドウである。ウィンドウ601−2Aが親ウィンドウ(rootウィンドウ)であり、ウィンドウ601−2B,C,Dが子ウィンドウである。ウィンドウ601−3は、ユーザアプリ501(3)のウィンドウである。ウィンドウ601−3Aが親ウィンドウ(rootウィンドウ)であり、ウィンドウ601−3Bが子ウィンドウである。
融合機101の画面のオーナーがユーザアプリ501(1)である場合には、図21Bのように、ユーザアプリ501(1)のウィンドウ601−1とTask Bar Manager611のウィンドウ611とがメモリ上に反映される。融合機101の画面のオーナーがユーザアプリ501(2)である場合には、図21Cのように、ユーザアプリ501(2)のウィンドウ601−2とTask Bar Manager611のウィンドウ611とがメモリ上に反映される。融合機101の画面のオーナーがユーザアプリ501(1)からユーザアプリ501(2)に切り替えられると、図21Bから図21Cのように、ユーザアプリ501(1)のウィンドウ601−1がメモリ上から削除され、ユーザアプリ501(2)のウィンドウ601−2がメモリ上に反映されることになる。
図22は、JSDKアプリ147のウィンドウの表示順番管理について説明するためのシーケンス図である。ウィンドウの表示順番とは、あるウィンドウが画面の前面にあってあるウィンドウが画面の後面にあるというウィンドウの重なり順番のことである。
ウィンドウの表示順番は、WinOrderクラスとWindowクラスが利用されて管理される。WinOrderクラスは、ウィンドウの表示順番を管理するためのクラスであり、ウィンドウオブジェクトを格納するためのコンテナを持つ。Windowクラスは、コンテナを継承したクラスであり、コンテナに対するウィンドウオブジェクトの追加や削除を行う。WinOrderクラスのメソッドとしては、指定ウィンドウをコンテナ先頭に追加するaddWindow()や、指定ウィンドウをコンテナから削除するremoveWindow()や、指定ウィンドウをコンテナ先頭に移動するsetFirst()や、指定ウィンドウをコンテナ末尾に移動するsetLast()等が存在する。Windowクラスのメソッドとしては、指定ウィンドウ(子ウィンドウ)をコンテナに追加するadd()や、指定ウィンドウ(子ウィンドウ)にWinOrderを引き渡すwin.setWinOrder()や、指定WinOrderをOrderフィールドに割付けるsetWinOrder()や、自らを最前面表示させるtoFront()等が存在する。
図22の説明に入る。始めに、Xlet Manager531がユーザアプリ501−1を生成(S1)する。これに続いて、Xlet Manager531からPanel Manager544に、ユーザアプリ501−1のルートウィンドウ601−1Aの生成要求が送信(S2)される。これに応じて、Panel Manager544がユーザアプリ501−1のルートウィンドウ601−1Aを生成(S3)する。これに続いて、Panel Manager544がユーザアプリ501−1のWinOrder701−1を生成(S4)する。これに続いて、Panel Manager544は、ルートウィンドウ601−1AにWinOrder701−1をリンク(S5)させる。これに応じて、ルートウィンドウ601−1Aは、自らをWinOrder701−1に登録(S6)する。これにて、Panel Manager544からXlet Manager531に、ユーザアプリ501−1のルートウィンドウ601−1Aの生成応答が送信(S7)される。図22のように、この時点でのウィンドウの表示順番は「ルートウィンドウA」が「1番」になる。
続いて、Xlet Manager531がユーザアプリ501−1を起動(S11)させて開始(S12)させる。これに続いて、ユーザアプリ501−1がウィンドウ601−1Bを生成(S13)する。これに続いて、ユーザアプリ501−1は、ルートウィンドウ601−1Aにウィンドウ601−1Bを貼り付け(S14)る。これに応じて、ルートウィンドウ601−1Aは、ウィンドウ601−1BにWinOrder701−1をリンク(S15)させる。これに応じて、ウィンドウ601−1Bは、自らをWinOrder701−1に登録(S16)する。図22のように、この時点でのウィンドウの表示順番は「ウィンドウB」が「1番」で「ルートウィンドウA」が「2番」になる。
続いて、ユーザアプリ501−1からルートウィンドウ601−1Aに、ルートウィンドウ601−1Aを最前面表示させる旨の要求が送信(S21)される。これに応じて、ルートウィンドウ601−1Aは、自らを最前面表示させる旨をWinOrder701−1に登録(S22)する。図22のように、この時点でのウィンドウの表示順番は「ルートウィンドウA」が「1番」で「ウィンドウB」が「2番」になる。
図23は、JSDKアプリ147のウィンドウのハイライト表示管理について説明するためのシーケンス図である。ウィンドウのハイライト表示とは、あるウィンドウが画面に明色表示されてあるウィンドウが画面に暗色表示されるというウィンドウの明色暗色表示のことである。
ウィンドウのハイライト表示は、HiLightWinクラスとWindowクラスが利用されて管理される。HiLightWinクラスは、ウィンドウのハイライト表示を管理するためのクラスであり、ハイライト表示されるウィンドウオブジェクトを格納するためのコンテナを持つ。Windowクラスは、コンテナを継承したクラスであり、コンテナに対するウィンドウオブジェクトの追加や削除を行う。HiLightWinクラスのメソッドとしては、指定ウィンドウをコンテナに追加するaddWindow()や、指定ウィンドウをコンテナから削除するremoveWindow()や、ハイライト表示されるウィンドウ等をコンテナから取得するgetHiLight()等が存在する。Windowクラスのメソッドとしては、指定ウィンドウ(子ウィンドウ)をコンテナに追加するadd()や、指定ウィンドウ(子ウィンドウ)にHiLightWinを引き渡すwin.linkHiLightWin()や、指定HiLightWinをHiLightフィールドに割付けるlinkHiLightWin()や、自らをハイライト表示させるsetHiLight()等が存在する。
図23の説明に入る。始めに、Xlet Manager531がユーザアプリ501−1を生成(S1)する。これに続いて、Xlet Manager531からPanel Manager544に、ユーザアプリ501−1のルートウィンドウ601−1Aの生成要求が送信(S2)される。これに応じて、Panel Manager544がユーザアプリ501−1のルートウィンドウ601−1Aを生成(S3)する。これに続いて、Panel Manager544がユーザアプリ501−1のHiLightWin801−1を生成(S4)する。これに続いて、Panel Manager544は、ルートウィンドウ601−1AにHiLightWin801−1をリンク(S5)させる。これに続いて、Panel Manager544は、タスクバー、すなわち、Task Bar Manager512のルートウィンドウ612AをHiLightWin801−1に登録(S6)する。これにて、Panel Manager544からXlet Manager531に、ユーザアプリ501−1のルートウィンドウ601−1Aの生成応答が送信(S7)される。図23のように、この時点のハイライト表示対象のウィンドウは「タスクバー」になる。
続いて、Xlet Manager531がユーザアプリ501−1を起動(S11)させて開始(S12)させる。これに続いて、ユーザアプリ501−1がウィンドウ601−1Bを生成(S13)する。これに続いて、ユーザアプリ501−1は、ルートウィンドウ601−1Aにウィンドウ601−1Bを貼り付け(S14)る。これに応じて、ルートウィンドウ601−1Aは、ウィンドウ601−1BにHiLightWin801−1をリンク(S15)させる。図23のように、この時点でのハイライト表示対象のウィンドウは「タスクバー」になる。
続いて、ユーザアプリ501−1からウィンドウ601−1Bに、ウィンドウ601−1Bをハイライト表示させる旨の要求が送信(S21)される。これに応じて、ウィンドウ601−1Bは、自らをハイライト表示させる旨をWinOrder701−1に登録(S22)する。図23のように、この時点でのハイライト表示対象のウィンドウは「タスクバー」と「ウィンドウB」になる。
図24は、Panel Manager544が管理する描画関連データのデータ構造を表す。Panel Manager544は、各JSDKアプリ147に係る描画関連データを、各JSDKアプリ147に係るXletInfoクラス901に格納して管理する。XletInfoクラス901は、Xletを特定するための情報を格納するためのXletクラス911,上述のWinOrderクラス912,上述のHiLightWinクラス913,ルートウィンドウに係る上述のWindowクラス914Aにより構成される。
ルートウィンドウに係るWindowクラス914Aは、ルートウィンドウの下位階層のウィンドウ(ここではウィンドウB)に係るWindowクラス914B等により構成される。ウィンドウBに係るWindowクラス914Bは、ウィンドウBの下位階層のウィンドウ(ここではウィンドウC)に係るWindowクラス914C等によって構成される。Windowクラス914A,B,Cは更に、メッセージ,ボタン,アイコン等を格納するためのクラス等により構成される。図25は、図24の描画関連データに対応する描画内容を表す。
ここで、System Manager543を構成するPower Managerについて説明する。Power Managerは、融合機101の電源のON/OFFイベント(電源モード移行)をXlet Manager531に通知するものとする。JSDKアプリ147(Xlet)のライフサイクルに影響する電源のON/OFFイベントを、JSDKアプリ147(Xlet)のライフサイクルの管理を行うXlet Manager531に通知するのである。
図26は、電源のON/OFFイベントの通知処理について説明するためのシーケンス図である。融合機101の電源がOFFになる際には、SCS169からPower Manager561に、電源OFFの問い合わせが送信(S1)される。これに応じて、Power Manager561は、電源OFFが可能かどうかを判断(S2)する。電源OFFが可能でない場合には、Power Manager561からSCS169に、電源OFF却下応答が送信(S3)される。電源OFFが可能である場合には、Power Manager561から各Xlet Manager531に、電源がOFFになる旨が通知(S4)される。これに応じて、各Xlet Manager531から各Xletに、電源がOFFになる旨が通知(S5)される。これに応じて、所定の各Xletが停止(S6)することになる。そして、各Xlet Manager531からPanel Manager544に、電源がOFFになる旨が通知(S7)される。これに応じて、Panel Manager544は、各Xletが確保しているメモリを開放(S8)することになる。そして、Panel Manager544からPower Manager561に、電源OFF処理の完了通知が送信(S9)される。これに応じて、Power Manager561からSCS169に、電源OFF許可応答が送信(S10)される。
続いて、SCS169からPower Manager561に、電源OFFの結果が
送信(S11)される。ここで、融合機101の電源OFFが確定した(S12)場合、SCS169からPower Manager561に、電源がONになる旨が通知(S13)されると、Power Manager561から各Xlet Manager531に、電源がONになる旨が通知(S14)される。融合機101の電源OFFが確定しなかった(S12)場合も、Power Manager561から各Xlet Manager531に、電源がONになる旨が通知(S14)される。これに応じて、各Xlet Manager531からPanel Manager544に、電源がONになる旨が通知(S15)される。これに応じて、Panel Manager544は、メモリへの書込処理を実行(S16)することになる。そして、Power Manager561から各Xlet Manager531に、書込処理の完了通知が送信(S17)される。これに応じて、各Xlet Manager531から各Xletに、電源がONになる旨が通知(S18)される。これに応じて、所定の各Xletが再開(S19)することになる。一方で、Power Manager561からPower Manager561に、書込処理の完了通知が送信(S21)される。これに応じて、Power Manager561からSCS169に、電源ON準備完了応答が送信(S22)される。
図6は、JSDKシステムの起動手順について説明するための図である。JSDKシステムではまず、JSDKアプリ147を起動するmain()関数を有するクラスであるJSDK Main521が、JSDK Environment522を生成(S1)する。続いて、JSDK Environment522が、Native層の構築(S2)と言語環境の構築(S3)をもって、JSDKシステムの実行環境の構築を行う。続いて、JSDK Environment522が、JSDK Manager533を生成(S4)する。JSDKシステムではそして、JSDK Manager533が、システム層のManagerを生成(S5−12)し、Multi Xlet Manager532とXlet Manager531を通じて、アプリ層のManagerを生成(S13−14)する。
図7は、JSDKシステムのGUI(Graphical User Interface)について説明するための図である。融合機101の機能キー315(図4参照)を押すと、図6のS1−14が実行されて、図7のGUIが融合機101のタッチパネル311(図4参照)に表示される。図7のGUIは、ユーザアプリ501を操作対象とする操作画面であり、図6のS13で起動されたJSDK GUI Manager511によって表示される。
図7Aは、画面を占有させるユーザアプリ501の切替操作を行うための切替操作画面である。図7Bは、ユーザアプリ501の起動操作を行うための起動操作画面である。図7Cは、ユーザアプリ501の終了操作を行うための終了操作画面である。図7Dは、ユーザアプリ501のインストール操作を行うためのインストール操作画面である。図7Eは、ユーザアプリ501のアンインストール操作を行うためのアンインストール操作画面である。図7Aが、機能キー315を押した直後にタッチパネル311に表示される初期画面であり、図7A,B,C,D,Eはそれぞれ切り替え,起動,終了,インストール,アンインストールのボタンをタッチすると表示されることになる。
SimplePrint,SimpleCopy,SimpleOcr,SimpleScan等はそれぞれユーザアプリ501である。例えば、SimplePrintは、電子文書のファイル名を入力することで当該電子文書のプリントを実行できるようにするためのアプリケーションである。なお、アプリケーションのタイプとは、GUIを有するアプリケーションであるか否かを意味する。
図7Aの切替操作画面について説明する。図7Aの切替操作画面には、切替操作対象としてインストール済みで実行中のユーザアプリ501の一覧が表示される。
図7Aの切替操作画面で「SimplePrint」にタッチすると、SimplePrintにオペレーションパネル202のオーナー権が付与されることになり、SimplePrintが画面を占有することになる。これに伴って、図7Aの画面から図8Aの画面に画面が移る。図8Aは、画面を占有するSimplePrintにより表示されるGUIである。
図7Aの切替操作画面で「SimpleCopy」にタッチすると、SimpleCopyにオペレーションパネル202のオーナー権が付与されることになり、SimpleCopyが画面を占有することになる。これに伴って、図7Aの画面から図8Bの画面に画面が移る。図7Aに示すように、SimpleCopyの状態は「異常」なので、図8Bのように、画面上にはSimpleCopyに係るエラーメッセージが表示される。
図7Aの切替操作画面で「SimpleOcr」にタッチすると、SimpleOcrにオペレーションパネル202のオーナー権が付与されることになり、SimpleOcrが画面を占有することになる。これに伴って、図7Aの画面から図8Cの画面に画面が移る。図7Aに示すように、SimpleOcrのタイプは「GUI無」なので、図8Cのように、画面上にはSimpleOcrの状態が表示される。
図8A,B,Cの画面の左端(楕円形で示す領域内)には、図6のS14で起動されたTask Bar Manager512により、ユーザアプリ501を操作対象とするタスクバーが表示される。これらのタスクバーは、画面を占有させるユーザアプリ501の切替操作を行うための切替タスクバーである。
図8Aの画面で切替タスクバー中の「SC」や「SO」にタッチすると、SimpleCopyやSimpleOcrにオペレーションパネル202のオーナー権が付与されることになり、SimpleCopyやSimpleOcrが画面を占有することになる。これに伴い、図8Aの画面から図8Bや図8Cの画面に画面が移る。図8Aの画面で切替タスクバー中の「JSDK」にタッチすると、図7Aの画面に画面が戻る。
図8Bの画面で切替タスクバー中の「SP」や「SO」にタッチすると、SimplePrintやSimpleOcrにオペレーションパネル202のオーナー権が付与されることになり、SimplePrintやSimpleOcrが画面を占有することになる。これに伴い、図8Bの画面から図8Aや図8Cの画面に画面が移る。図8Bの画面で切替タスクバー中の「JSDK」にタッチすると、図7Aの画面に画面が戻る。
図8Cの画面で切替タスクバー中の「SP」や「SC」にタッチすると、SimplePrintやSimpleCopyにオペレーションパネル202のオーナー権が付与されることになり、SimplePrintやSimpleCopyが画面を占有することになる。これに伴い、図8Cの画面から図8Aや図8Bの画面に画面が移る。図8Cの画面で切替タスクバー中の「JSDK」にタッチすると、図7Aの画面に画面が戻る。
図7Bの起動操作画面について説明する。図7Bの起動操作画面には、起動操作対象としてインストール済みで実行されていないユーザアプリ501の一覧が表示される。
図7Bの起動操作画面で「SimplePrint」にタッチすると、SimplePrintの起動処理を実行するか否かを確認する確認画面(図9)が表示される。図9の確認画面でプロダクトコードを入力し「実行」にタッチすると、SimplePrintが起動されることになる。
図7Cの終了操作画面について説明する。図7Cの終了操作画面には、終了操作対象としてインストール済みで実行中のユーザアプリ501の一覧が表示される。
図7Cの終了操作画面で「SimplePrint」にタッチすると、SimplePrintの強制終了処理を実行するか否かを確認する確認画面(図10)が表示される。図10の確認画面で「実行」にタッチすると、SimplePrintが強制終了されることになる。
図7Dのインストール操作画面について説明する。ユーザアプリ501のインストール処理により、起動可能ユーザアプリとして未登録のユーザアプリ501が起動可能ユーザアプリとして登録されることになる。図7Dのインストール操作画面には、インストール操作対象としてユーザアプリ501の一覧がインストール状況と共に表示される。
図7Dのインストール操作画面で「SimplePrint」にタッチすると、SDcardを格納元とするSimplePrintのインストール先を確認する確認画面(図11)が表示される。図11の確認画面で「SDcard」にタッチすると、SimplePrintがSDcardをインストール先としてインストールされることになり、図11の確認画面で「HDD」にタッチすると、SimplePrintがHDDをインストール先としてインストールされることになる。
図7Eのアンインストール操作画面について説明する。ユーザアプリ501のアンインストール処理により、起動可能ユーザアプリとして登録済みのユーザアプリ501が起動可能ユーザアプリとしての登録を抹消されることになる。図7Eのアンインストール操作画面には、アンインストール操作対象として登録済みのユーザアプリ501の一覧が表示される。
図7Eのアンインストール操作画面で「SimplePrint」にタッチすると、SimplePrintのアンインストール処理を実行するか否かを確認する確認画面(図12)が表示される。図12の確認画面で「実行」にタッチすると、SimplePrintがアンインストールされることになる。
図13は、起動操作画面の表示手順について説明するための図である。切替操作画面で起動のボタンがタッチされると、JSDK GUI Manager511からInstall Manager545に、インストール済みのユーザアプリ501の一覧要求が送信(S1)される。これに応じて、Install Manager545は、インストール済みのユーザアプリ501の格納位置に係る情報(融合機101内のNVRAMに格納されている)を元に、インストール済みのユーザアプリ511のJNLPファイルを取得(S2)する。融合機101にセットされたSDcardからは、当該SDcard内のユーザアプリ511のJNLPファイルが取得される。融合機101内のHDDからは、当該HDD内のユーザアプリ511のJNLPファイルが取得される。JNLPファイルは、ユーザアプリ511と1対1で対応しており、ユーザアプリ511の定義付けに係る情報を含んでいる。そして、インストール済みのユーザアプリ511のJNLPファイルの内容を元に、Install Manager545からJSDK GUI Manager511に、インストール済みのユーザアプリ501の一覧応答が送信(S3)される。これにより、切替操作画面から起動操作画面に画面が移ることになる。
図14は、起動処理の実行手順について説明するための図である。起動操作画面で選択操作が実行されて確認画面で確認操作が実行されると、JSDK GUI Manager511からJSDK Manager533に、ユーザアプリ501の起動要求が送信(S1)される。これに応じて、JSDK Manager533からMulti Xlet Manager532に、Authentication Manager547による認証処理を経由してから、ユーザアプリ501の起動要求が送信(S2)される。これに応じて、Multi Xlet Manager532がXlet Manager531を起動(S3)し、Xlet Manager531がPanel Manager544からルートウィンドウを取得(S4)し、Xlet Manager531がユーザアプリ501を起動(S5)する。そして、Multi Xlet Manager532からJSDK Manager533に、ユーザアプリ533の起動応答が送信(S6)される。そして、JSDK Manager533からJSDK GUI Manager511に、ユーザアプリ533の起動応答が送信(S7)される。
図15は、インストール操作画面の表示手順について説明するための図である。切替操作画面上でインストールのボタンがタッチされると、JSDK GUI Manager511からInstall Manager545に、ユーザアプリ501の一覧要求が送信(S1)される。これに応じて、Install Manager545は、ユーザアプリ511のJNLPファイルを取得(S2)する。融合機101にセットされたSDcardからは、当該SDcard内のユーザアプリ511のJNLPファイルが取得される。融合機101とネットワークで接続されたWebサーバからは、当該Webサーバ内のユーザアプリ511のJNLPファイルが取得される。JNLPファイルは、ユーザアプリ511と1対1で対応しており、ユーザアプリ511の定義付けに係る情報を含んでいる。そして、ユーザアプリ501のインストール状況に関する情報(融合機101内のNVRAMに格納されている)や、ユーザアプリ511のJNLPファイルの内容を元にして、Install Manager545からJSDK GUI Manager511に、ユーザアプリ501の一覧応答が送信(S3)される。これにより、切替操作画面からインストール操作画面に画面が移ることになる。
図16は、インストール処理の実行手順について説明するための図である。インストール操作画面で選択操作が実行されて確認画面で確認操作が実行されると、JSDK GUI Manager511からInstall Manager545に、ユーザアプリ501のインストール要求が送信(S1)される。これに応じて、Install Manager545は、Authentication Manager547による認証処理を経由してから、ユーザアプリ501をインストール(S2)する。そして、Install Manager545からJSDK GUI Manager511に、ユーザアプリ533のインストール応答が送信(S3)される。
図17は、JNLPファイルの構文の例を表す。JNLP(Java(登録商標) Network Launching Protocol)ファイルはXML(eXtensible Markup Language)ファイルであり、JNLPファイル書式はJNLP規格に準拠している。ただし、JSDK向けに独自の拡張を施している部分があるため、以下その部分について説明する。
記述1は、informationエレメントであり、アプリケーション名を示すtitleエレメント(記述1A)や、ベンダ名を示すvenderエレメント(記述1B)や、ベンダの電話番号を示すtelephoneエレメント(記述1C)や、ベンダのファクス電話番号を示すfaxエレメント(記述1D)や、アプリケーションのプロダクトIDを示すproductIDエレメント(記述1E)を含んでいる。
記述2は、securityエレメントである。
記述3は、resourceエレメントであり、JSDKのバージョンを指定するjsdkエレメント(記述3A)や、JARファイル(アプリケーションの実行ファイル)とそのバージョンを指定するjarエレメント(記述3B)や、SUB−JNLPファイルを指定するsub−jnlpエレメント(記述3C)を含んでいる。
記述4は、updateエレメントであり、更新処理の実行方法を設定するエレメントである。autoであればアプリケーションの更新処理は自動更新で実行され、manualであればアプリケーションの更新処理は手動更新で実行され、mailであればアプリケーションの更新処理が実行可能である場合にその旨を通知する更新通知メールが配信される。
記述5は、installエレメントであり、インストール処理の実行方法を設定するエレメントである。autoであればアプリケーションのインストール先は自動選択にて選択され、manualであればアプリケーションのインストール先は手動選択にて選択される。
記述6は、アプリケーションのタイプが「GUI有」であるか「GUI無」であるかを示す。
図17のupdateエレメントで触れたように、インストール済みのJSDKアプリ147は更新処理の対象となる。以下、インストール済みのJSDKアプリ147を自動更新する自動更新処理について説明する。
図18は、SDcard又はHDD内のJSDKアプリ147(更新対象アプリ)を、SDcardからのJSDKアプリ147(更新用アプリ)に自動更新する自動更新処理に係るフローチャートである。
JSDKプラットフォーム148は、融合機101に接続された更新用SDcardスロットに更新用SDcardがセットされた場合、更新用SDcard内の更新用アプリのJNLPファイルを取得(S101)する。JSDKプラットフォーム148は、そのJNLPファイルのupdateエレメントが「auto」で、そのJNLPファイルに係る更新用アプリと同一の更新対象アプリが存在する場合(S102・S103)には、その更新用アプリのバージョンとその更新対象アプリのバージョンとを比較(S104)する。JSDKプラットフォーム148は、更新用アプリのバージョンが更新対象アプリのバージョンより新しい場合(S105)には、更新用アプリをもって更新対象アプリを更新(S106)する。
図19は、SDcard又はHDD内のJSDKアプリ147(更新対象アプリ)を、WebからのJSDKアプリ147(更新用アプリ)に自動更新する自動更新処理に係るフローチャートである。
JSDKプラットフォーム148は、更新対象アプリのJNLPファイルを取得(S201)する。JSDKプラットフォーム148は、そのJNLPファイルのupdateエレメントが「auto」で、そのJNLPファイルに係る更新対象アプリと同一の更新用アプリが、融合機101とネットワーク接続されたWebサーバ内に存在する場合(S202・S203)には、その更新対象アプリのバージョンとその更新用アプリのバージョンとを比較(S204)する。JSDKプラットフォーム148は、更新対象アプリのバージョンより更新用アプリのバージョンが新しい場合(S205)には、更新対象アプリを更新用アプリをもって更新(S206)する。
最後に、図5の説明中で登場したXlet等のライフサイクルについて説明することにする。
図20は、Xletの状態遷移図である。Xletの状態としては、初期化状態(Loaded)と、停止状態(Paused)と、活性化状態(Active)と、終了状態(Destroyed)が存在する。Xletの状態は、起動(initXlet)や、開始(startXlet)や、停止(pauseXlet)や、終了(destroyXlet)等のメソッドコールによって遷移する。Xletのライフサイクルとは、このようなXletの状態遷移にほかならない。ただし、どのような状態が存在するか、どのようにして状態が遷移するか、については様々なバリエーションがあり得るだろう。このことは、Xlet ManagerやMulti Xlet Managerその他の各Managerについても同様である。
初期化状態は、Xletインスタンスの生成直後の状態である。初期化状態への遷移は1度限りである。停止状態は、サービス提供停止中の状態であり、活性化状態は、サービス提供中の状態である。停止状態と活性化状態との間の遷移は何度でも可能である。終了状態は、Xletインスタンスの消滅直後の状態である。終了状態への遷移は1度限りである。
図5の説明中で記載したように、JSDKアプリ147のライフサイクルは、JSDKプラットフォーム148によって管理される。例えば、JSDKアプリ147は、自己の開始・停止・終了の際には自己の開始・停止・終了をJSDKプラットフォーム148に依頼するのである。JSDKアプリ147のライフサイクルをJSDKプラットフォーム148によって管理するメリットとしては例えば、メモリの節約が可能になることが挙げられる。特に、多数のJSDKアプリ147がそれぞれスレッドとして実行されるマルチスレッドにおいては、このメリットの存在価値は大きいと言える。JSDKアプリ147をXletとするメリットとしては例えば、JSDKアプリ147のライフサイクル管理が容易になることが挙げられる。
(変形例)
図1の融合機101は、本発明(画像形成装置)の実施例に該当し、図1の融合機101によって実行される情報処理は、本発明(情報処理方法)の実施例に該当する。図5のJSDKプラットフォーム148は、本発明(情報処理プログラム)の実施例に該当し、図5のJSDKプラットフォーム148が記録されたSDcardやCD−ROMは、本発明(記録媒体)の実施例に該当する。