この記事では、標準のJava(Java SE、J2SE)プラットフォームでヘッドレスモードを使用する方法を紹介します。
ヘッドレスモードは、ディスプレイ、キーボード、またはマウスに欠けている場合のシステム構成です。信じられないように聞こえますが、実際、グラフィックデータを使用しても、このモードで異なる操作を完了することができます。
このモデルはどこで使用できますか?アプリケーションが常に写真を生成することを考えてください。たとえば、ユーザーがシステムでログに記録すると、認証画像が生成されます。写真を作成するときは、ディスプレイもキーボードも適用する必要はありません。アプリケーションにはメインアーキテクチャまたは独自のサーバーがあると仮定しますが、このサービスにはディスプレイ、キーボード、またはマウスがありません。理想的な決定は、非視覚的特性ではなく、多数の視覚コンピューティング能力を使用することです。ヘッドレスモードで生成された画像は、より深いレンダリングのためにヘッドフルシステムに渡すことができます。
java.awt.toolkitおよびjava.awt.graphicsenvironmentクラスには、モニター、キーボード、マウスの方法を呼び出す方法があります。ただし、キャンバスやパネルなどの一部のカテゴリは、ヘッドレスモードで実行できます。 J2SE 1.4プラットフォームの後、ヘッドレスモードをサポートします。
注:この記事では、Java SE6プラットフォームバージョンのドキュメントに焦点を当てています。 APIまたはその他の拡張されたJava SEプラットフォームは、JSR270 Expert Group(JSR 270 Expert Group。)によってレビューおよび承認されています。
ツールキット
java.awt.toolkitクラスは、抽象ウィンドウツールキット(AWT)の抽象的な親クラスです。 Toolkitのサブクラスは、さまざまなAWTコンポーネントを特定のローカルツールキットにバインドするために使用されます。
デバイス、キーボード、またはマウスがサポートされていない場合、多くのコンポーネントが影響を受けます。適切なコンストラクターは、ヘッドレスエクセプトの例外をスローする必要があります。
このヘビー級コンポーネントには、ヘッドレスマシンでは正常に機能しないように、ピアからピアレベルのグラフィカル機能が必要です。
キャンバス、パネル、および画像コンポーネントに関連するコンポーネントは、ヘッドレスエクセプトの異常をスローする必要はありません。これらのコンポーネントはオペレーティングシステムレベルで空の関数を使用し、軽量コンポーネントとして処理できるためです。
Headlessのツールキットは、Javaコンポーネントをローカルリソースにバインドしますが、リソースにディスプレイデバイスや入力デバイスが含まれていない場合にのみこれを行います。
グラフィック環境
java.awt.graphicsenvalonmentクラスは、特定のプラットフォームのJavaテクノロジーで使用できるグラフィックスデバイスオブジェクトとフォントオブジェクトのコレクションを説明する抽象クラスです。 GraphicsEnvalonmentのリソースは、ローカルまたは長距離機器です。 GraphicsDeviceオブジェクトは、ディスプレイ、プリンター、またはグラフィックスキャッシュにすることができ、Graphics2D描画機能の目標です。各GraphicsDeviceには、それに関連する多くのGraphicsConfigurationオブジェクトがあります。これらのオブジェクトはさまざまな構成環境を指定し、GraphicsDeviceをこれらの構成環境で使用できます。
表1にグラフィックセンバロンメソッドを示し、ヘッドレスモードのサポートを確認してください
表1。ヘッドレスモードメソッド
注:isheadless()メソッドは、システムハードウェア構成の代わりに特定のシステム属性、java.awt.headlessをチェックします。
ヘッドレッスルエクセプションによってスローされたコードは、これらのいずれかをサポートしていない環境として展示、キーボード、マウスに依存します。
ヘッドレスモードを設定します
ヘッドレスモードを使用して操作するには、まずこれに関連するシステム属性を確認および設定する方法を理解する必要があります。さらに、ツールバーを使用してヘッドレス実装クラスを作成する方法を理解する必要があります。
システム属性構成
ヘッドレスモードを有効にするには、SetProperty()メソッドを使用して、対応するシステム属性を設定する必要があります。この方法により、システム属性を期待値で設定できます。
System.SetProperty( "Java.awt.headless"、 "true");
上記のコードでは、java.awt.headlessはシステム属性であり、TRUEが設定された値です。
同じプログラムの1つでヘッドレスおよび従来の環境を使用する場合は、次のコマンドラインを使用して完了できます。
Java -djava.awt.headless = true
デフォルトのツールキットを作成します
java.awt.headlessの名前のシステム属性がtrueに設定されている場合、ヘッドレスツールキットが使用されます。次に、getDefaultToolkit()メソッドを使用して、ヘッドレスツールのインスタンスを作成します。
Toolkit tk = toolkit.getDefaultToolkit();
ヘッドレスモードチェック
Headessモードの使いやすさを確認するには、GraphicsEnvironmentクラスのiSheadless()メソッドを使用します::
GraphicsEnvironment ge = graphicsenvironment.getLocalGraphicsEnvironment();
この方法は、java.awt.headlessシステム属性をチェックします。この属性にtrueの値がある場合、ツールキットからヘッドレスエクセプトを投げ、ディスプレイ、キーボード、およびマウスグラフィックスセンバロンメントクラスに依存します。
ヘッドレスモードでの操作
ヘッドレスモードを設定し、ヘッドレスツールキットのインスタンスを作成した後、アプリケーションは次の操作を実行できます。
キャンバス(キャンバス)
次のコードは、画面に空白の長方形の領域を描画し、その上に線を描くことができます。 Canvasクラスを使用して、新しいCanvasコンポーネントを作成できます。
最終canvas canvas(){public void paint(グラフィックg){getbounds(); 、R.Width -1、0);}};フォント(フォント)
このコードは、フォントを使用してテキスト文字列を描画し、テキストのフォントを設定する方法を示しています。グラフィックオブジェクトは、この文字列を描画するために使用されます。
public void paint(グラフィックg){g.setfont(new font( "arial"、font.italic、12); g.drawstring( "test"、32、8);}
色
このコードは、指定された赤、緑、青の値を使用して、線の色を設定する方法を示しています。グラフィックオブジェクトは、この行を描画するために使用されます。
public void paint(グラフィックスG){g.setcolor(新しい色(255、127、0));画像
次のコードでは、javax.imageio.imageioクラスのread()メソッドが図1に示すgrapefruit.jpgファイルを解読し、キャッシュ画像を返しました。
画像i = null {file f = new file( "grapefruit.jpg");図1。 grapefruit.jpg画像ファイル
印刷
このコードは、利用可能なキャンバスを印刷する方法を示しています。ペイントメソッドを使用して、プリンターのデフォルト画面をカスタマイズできます。
printerjob pj = printerjob.getprinterjob(); setprintable(){public int print(graphics g、pageformat pf、int pageindex){return printable.no_such_page;}((graphics2d)g)g)g) )Translate(pf.getimageablex()、pf.getimageabley());ビープ
次のコードは、ツールキットクラスのビープ方法が使用されている場合のビープ方法を示しています。
Toolkit tk = toolkit.getDefaultToolkit();
ヘッドレスモードを使用する簡単な例
次のHeadlessbasicsの例では、記事で説明されているすべての機能を使用します。
この例を実行するには、Javacを使用して次のコードをコンパイルする必要があります。 Grapefruit.jpgの画像ファイルをコピーして、Headlessbasicsクラスが配置されているディレクトリにコピーします。
import java.io.*; //ツールキットが初期化される前にこれを呼び出す、つまり、Toolkit.getDefaultToolkit()が呼び出された前に、「true ");プロパティは、//標準ビープ()を使用できますgraphicsenvironment.getlocalgraphicsviroronment() " + ge.isheadless() ;} catch(例外z){z.printstacktrace(system.err);} system.err.printlnパネルはcreated = false {button( "button");} println( " + created); .height -1) fonts g.setfont(new Font( "arial"、font.italic、12); g.drawstring( "test"、32、8);}; //すべての操作は正しく機能します。 32、128、128); .printstacktrace(system.err);} printerjob = pj.getPrinterjob(); (pageindex> 0){ret urn printable.no_such_page;}((graphics2d)g).getimageablex()、pf.getimageabley()); if(im!= null){g.drawimage(32、64、64、null);} page_exists;}); z){z.printstacktrace(system.err);}}}}}}}}図2は、この例の印刷結果を示しています。
図2。ヘッドレスベースの印刷出力。
さらに、次の情報を見ることができます。
ヘッドレスモード:truejava.awt.graphicsenvironment.hava.awt.windowのjava.awt.frame>(未知のソース)。 Java:24)フレームが作成されます:falsejava.head.headlessexception java.awt.graphicsenvalonment.checkheadless(不明なソース)t java.awt.button(未知のソース)作成されます:false
注:デモンストレーションの目的で、最初のコードにより、このアプリケーションは2つのJava.awt.headlessexceptions異常をスローします。
前の方法の代替として、標準の出力情報をファイルに入れてファイルを印刷できます。この場合、次のコマンドラインを使用してこの例を実行します。
Java Headlessbasics 2> Standard_output.txt
既存のアプリケーションをヘッドレスモードに変換します。
既存のアプリケーションを実行可能なヘッドレスモードにどのように変換しますか?この変換を実行する最も効果的な方法は、ソースコードを分析して、機能がヘッドレスモードに依存することを判断することです。言い換えれば、同じ機能を実現するには、ヘッドレスエクセプトの例外をスローするクラスとメソッドを見つけてから、独立したヘッドレスモードを使用してこれらのクラスとメソッドを置き換える必要があります。
Java SE 6 APIを使用して、特定のクラスまたはメソッドがヘッドレスモードをサポートするかどうかを判断することができます。特定のコンポーネントがヘッドレスモードをサポートしていない場合、プログラムがキャプチャする必要がある唯一の異常はヘッドレスエクセプションです。他の可能性のある異常の前に捨てられます。これが、このセクションのコード例で他の異常をキャプチャする特別な必要性がない理由です。ヘッドレスモードを使用します」。
ヘッドレスモードを使用する他の便利な方法の利点を間違いなく見つけることができます。この記事がこのタスクを完了し、Java SEプラットフォームで新しい世界を再生するのに役立つことを願っています。