アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

lightweightとheavweightとは【Java AWT】

SwingやAWTを使用する時にWindowsAPIを叩きたい時にネイティブウィンドウハンドル(HWND)を取得したい場合があります。
heavweightはネイティブスクリーンリソースに紐付けられている為、HWNDが取得できますが、lightweightはネイティブに紐付けられていないため取得できません。

例えば、javax.swing.JPanel はlightweightです。 java.awt.Button はheavweightです。

JNAでlightweightのHWNDを取得しようとすると以下のようなエラーが出ます。
com.sun.jna.Native#getComponentPointer

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Component must be heavyweight

参考

https://www.oracle.com/technical-resources/articles/java/mixing-components.html