【问题标题】:Reparent X11 window on a JFrame or a JPanel?在 JFrame 或 JPanel 上重新设置 X11 窗口?
【发布时间】:2012-08-02 12:19:35
【问题描述】:

为了将 C/C++ X11 应用程序嵌入到另一个 Java 应用程序中,是否可以在以下位置重新设置 X11 顶级小部件:

  • JFrame 或 JWindow(使用包 sun.awt.x11 捕获其 X11 对等方的 X11 窗口 ID)?
  • 还是 JPanel?

我更喜欢用 JPanel 重新父母,但我不确定这是否可能。

【问题讨论】:

  • 您好,我不明白为什么我得到了-1 票。我的问题有什么问题?
  • 第一个问题:您可以使用 JNI 将 C++ 应用程序嵌入到 JVM 中,还是必须将它们作为单独的应用程序保留?如果您将应用程序链接在一起,这样做会更容易。
  • 第二个问题:涉及到OpenGL吗?
  • 从未尝试过,但也许这种方法会有所帮助:javasourcecode.org/html/open-source/jdk/jdk-6u23/sun/awt/X11/…
  • 第一个问题:不,它们必须作为单独的应用程序保留。第二个问题:不涉及 OpenGL。

标签: java jframe jpanel x11 reparenting


【解决方案1】:

我搜了一下发现:

一个递归函数,它将搜索(从根窗口开始)具有所需名称的窗口

Window windowWithName(Display *dpy, Window top, char *name)
{
        Window *children, dummy;
        unsigned int nchildren;
        unsigned int i;
        Window w = 0;
        char *window_name;

        if (XFetchName(dpy, top, &window_name) && !strcmp(window_name, name))
                return (top);

        if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren))
                return (0);

        for (i = 0; i < nchildren; i++)
        {
                w = windowWithName(dpy, children[i], name);
                if (w)
                        break;
        }
        if (children)
                XFree((char *) children);
        return (w);
}

你可以随时打开java.net.Socket6000端口左右,然后自己说X11
code that might help

reference,希望对您有所帮助
注意: sun.awt.x11不再jdk7

【讨论】:

  • 谢谢!我要试试你的解决方案。保持通知。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 2018-10-22
  • 2015-06-24
  • 2013-01-17
  • 2020-03-31
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多