スイングアプリのグラールネイティブ画像:画像ヒープで検出され始めたスレッド

アルフ:
public class SimpleApp {
    public static void main( String[] args ) {
        JOptionPane.showMessageDialog(null, "Ciao", "Info", JOptionPane.INFORMATION_MESSAGE);
    }
} 

私はネイティブイメージを作成しようとすると、native-image --no-fallback私はこれを取得します:

エラー:画像ヒープで開始したスレッドを検出しました。画像ジェネレータで実行中のスレッドは、もはや画像の実行時に実行されていません。オブジェクトは、おそらくクラス初期化子によって作成され、静的フィールドから到達可能であるました。ClassInitialization =:デフォルトでは、すべてのクラスの初期化は、手動でオプション-Hを用いて、画像、実行時にクラスの初期化を遅らせることができますネイティブイメージbuilding.You中に行われます。それとも、あなた自身の初期化メソッドを書いて、あなたのメインエントリポイントから明示的に呼び出すことができます。

詳細メッセージ:トレース:オブジェクトsun.java2d.opengl.OGLRenderQueueフィールドsun.java2d.opengl.OGLRenderQueue.theInstance

NerdDad:

これは、すべてのクラスが初期化されなければならないときに関連している-このテーマに関するGraalVMチームから更新された記事があります:https://medium.com/graalvm/updates-on-class-initialization-in-graalvm-native-画像生成-c61faca461f7

ショートバージョン:使用が問題のクラスと呼ばれるものを見つけるために(あなたよりグラールパッケージの新しいバージョンで追加)トレースして、実行時に初期化するためにそれらを設定します。行うには難しく、言うのは簡単。何それの価値については、私はちょうど19.2(企業)のリリースとAWTを含むいくつかのランダムなコードと同じ問題をヒット。(わずかに明確にするために編集された)もメッセージは、変更されています。

エラー:画像ヒープで開始したスレッドを検出しました。画像ジェネレータで実行中のスレッドは、もはや画像の実行時に実行されていません。このオブジェクトがインスタンス化された使用を得た方法を確認するには-H:+TraceClassInitializationオブジェクトは、おそらくクラス初期化子によって作成され、静的フィールドから到達可能であるました。あなたはオプションを使用して画像の実行時にクラスの初期化を要求することができます--initialize-at-build-time=<class-name>それとも、あなた自身の初期化メソッドを書いて、あなたのメインエントリポイントから明示的に呼び出すことができます。 Trace: object sun.awt.AWTAutoShutdown method sun.awt.AWTAutoShutdown.getInstance()

私は多分、「Hello World」ののAWT同等で始まる(これを通じて作業になりますと、私が成功した場合、具体的な内容と私の答えを更新します。グーグルは、Swingで/ AWT / JavaFXの、Iように動作していないネイティブの画像の例が散らばっています「必ず私が成功することはないメートル。

免責事項:OracleのIの仕事ではなく、密接グラール開発者(一般的ではおそらくノーマネージャー)に接続されている組織インチ 私が言うものは、私の意見です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=228340&siteId=1