3

ご挨拶、

画面以外のデバイスでJFrame図面を取得しようとしています。JFrameコンストラクターには

 JFrame(GraphicsConfiguration) 

一見これを許可するには:

私の最初の試みは、getType()が呼び出されたときにGraphicsDeviceがGraphicsDevice.TYPE_IMAGE_BUFFERを報告した独自のGraphicsConfigurationを作成することでした。

ただし、JFrame.initは特にタイプを検索し、タイプがTYPE_RASTER_SCREENでない場合は例外をスローします。

    if (graphicsConfig.getDevice().getType() !=
        GraphicsDevice.TYPE_RASTER_SCREEN) {
        throw new IllegalArgumentException("not a screen device");
    }

次に、GraphicsDeviceを作成しようとしました。レポートGraphicsDevice.TYPE_RASTER_SCREENを返しました。これにより、JFrameを正しく初期化できましたが、表示するときに、

Exception in thread "main" java.lang.ClassCastException: TestGraphicsConfiguration cannot be cast to sun.awt.X11GraphicsConfig

そのため、画面に表示されないが、完全にレイアウトされ機能しているJFrameを描画する方法について、アイデアが不足しています。

ここでうさぎの穴を下っていますか、それともこれを行うことができますか?

4

1 に答える 1

3

などのJavaトップレベルコンテナは、通常はJNIを介して、ホストプラットフォームにネイティブなピアコンポーネントJFrameへのアクセスを必要とします。または、ここで説明するように、またはモードを使用できる場合があります。BufferedImagejava.awt.headless

補遺:

「どんな人間」でも仲間の選び方に取って代わることができるのだろうか。

特定のピアコンポーネントを置き換える方法はわかりませんが、プラットフォーム固有のネイティブコンポーネントを呼び出すことは可能です。Java Native Access(JNA)は、そのような手段の1つです。極端な例として、この6502 JVMは、1MHzで動作する8ビットプロセッサ上で128Kで動作します。右下のスクリーンショットのソースを含むデモは、を使用してコンパイルされjavacました。

于 2011-04-08T19:51:35.970 に答える