是否有可能在Java 9中获得JavaFX窗口的HWND ?



Java 9将限制对私有API的任何访问。这意味着使用反射检索窗口hwnd的已知方法将不再工作。

还有办法得到它们吗?我问这个问题是因为我有一个库,它提供了操作任务栏的API(类似于Java9提供的方式)。Java 9 API仍然是用于AWT的,所以我希望我可以为Java 9和JavaFX进行项目设置。

我过去只调用私有方法,但这将停止工作。任何解决方案都是值得赞赏的。如果可以使用JNA或BridJ,则本机调用是可以的。

一种方法可以是对已经建议的解决方案进行更改,我如何获得JavaFX舞台的窗口句柄(hWnd) ?在JDK9之前非常有用:-

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;
}

module-info.java有点像:

module your.module {
    requires javafx.graphics;
}

但是由于javax.graphics在内部将包导出到特定的模块:

exports com.sun.javafx.tk to
    javafx.controls,
    javafx.deploy,
    javafx.media,
    javafx.swing,
    javafx.web;

你可以尝试添加一个编译器选项来使用它作为

--add-exports javax.graphics/com.sun.javafx.tk=your.module

注意/小鬼:免责声明中从 - 261:模块系统 -

--add-exports--add-opens选项必须谨慎使用护理。您可以使用它们来访问库的内部API模块,甚至JDK本身,但您需要自行承担风险:If如果内部API被更改或删除,那么您的库或

相关内容

  • 没有找到相关文章

最新更新