首页 > 解决方案 > 在 Java 11 中使用 Java AWT 获取 Compent 的 Winows 句柄以进行 OpenOffice 集成

问题描述

几年前,我编写了一个包含 OpenOffice Writer 组件的 Java 应用程序 (Swing)。

该技巧依赖于 jdk 中的一些 sun.awt 类来检索 AWT 容器的句柄并将其传递给 OO 对象:

public static long getHWnd(Component f) {
    ComponentPeer compPeer = f.getPeer();
    if (compPeer == null) {
        return 0;
    }
    if (compPeer instanceof WComponentPeer) {
        return ((WComponentPeer) compPeer).getHWnd();
    }
    // typically we get here if the peer is of class sun.awt.NullComponentPeer
    // (e.g if the Component is a Swing object - apparently these do not have a "peer")
    return -1;
}

在我搬到 OpenJDK 之前,这一直有效。

在 Java 11 中,Componet#getPeer不再可用。

在 OpenJDK 中,WComponentPeer不能作为旧 sun.awt 类的一部分使用

他们是否有其他方法可以在 Java11 中检索该句柄?

(或者更简洁的方式将 OO Writer 组件集成到 Java Swing 应用程序中?)

标签: javaswingawtopenoffice.org

解决方案


推荐阅读