Java 9はプライベートAPIへのアクセスを制限します。つまり、リフレクションを使用してウィンドウhwndを取得する既知の方法はもう機能しません。Java 9でJavaFXウィンドウのHWNDを取得できますか?
まだ入手方法はありますか?私はタスクバーを操作するためのAPIを提供するライブラリを持っているので(私はJava9が提供する同様の方法で)質問します。 Java 9 APIはまだAWT用ですので、Java 9とJavaFX用にプロジェクトをセットアップすることができれば幸いです。
プライベートメソッドを呼び出すだけでしたが、これは機能しなくなります。 解決方法はありますか?ネイティブ・コールは、JNAまたはBridJを使用して実行できる場合は正常です。 javax.graphics
をエクスポートするので
module your.module {
requires javafx.graphics;
}
しかし:module-info.java
やや等と
try {
TKStage tkStage = stage.impl_getPeer();
Method getPlatformWindow = tkStage.getClass().getDeclaredMethod("getPlatformWindow");
getPlatformWindow.setAccessible(true);
Object platformWindow = getPlatformWindow.invoke(tkStage);
Method getNativeHandle = platformWindow.getClass().getMethod("getNativeHandle");
getNativeHandle.setAccessible(true);
Object nativeHandle = getNativeHandle.invoke(platformWindow);
return new Pointer((Long) nativeHandle);
} catch (Throwable e) {
System.err.println("Error getting Window Pointer");
return null;
}
- :
は、あなたはちょうどあなたがすでに使用して、別のパッケージにコピーし、アプリケーションに結果Javaとネイティブコードを出荷しているメソッドのソースコードを見てすることはできますか? – jewelsea
パッケージ変更がなぜ私を助けてくれるのか、私は本当に分かりません。 Java 9では、モジュール情報ファイルからエクスポートされていないAPIにアクセスしようとすると、その使用が許可されず、ReflectionExceptionsが全面的にスローされます。 – SirWindfield
コードをコピーして自分のパッケージに入れ、自分のパッケージから必要な機能をエクスポートするモジュール情報ファイルを作成すると、あなたが参照しているRelectionExceptionsを受け取るべきではありません。つまり、そうすることは、そうしたアプローチを価値のないものにする微妙な合併症を起こす可能性があることを実感しています。 – jewelsea