Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的工作空间又称台式机_Java_Desktop_X11_Workspace_Ewmh - Fatal编程技术网

Java中的工作空间又称台式机

Java中的工作空间又称台式机,java,desktop,x11,workspace,ewmh,Java,Desktop,X11,Workspace,Ewmh,在发现和/或设置我的应用程序位于哪个桌面/工作区(当然是在Linux/Solaris下)方面有什么进步吗?在现代窗口管理器上发现/设置桌面是通过阅读/设置EWMH规范中的\u NET\u WM\u desktop属性来完成的() 我不知道有哪种封装整齐的API公开了这一功能,但谷歌出现了,这可能是一个开始。我是该项目的作者,该项目由“NetFrmeExtents.java”链接 以下是我的答案: 除非swing/awt现在已经实现了它,否则在纯java中很难做到这一点。最直接(也是唯一?)的方法

在发现和/或设置我的应用程序位于哪个桌面/工作区(当然是在Linux/Solaris下)方面有什么进步吗?

在现代窗口管理器上发现/设置桌面是通过阅读/设置EWMH规范中的
\u NET\u WM\u desktop
属性来完成的()


我不知道有哪种封装整齐的API公开了这一功能,但谷歌出现了,这可能是一个开始。

我是该项目的作者,该项目由“NetFrmeExtents.java”链接

以下是我的答案:

除非swing/awt现在已经实现了它,否则在纯java中很难做到这一点。最直接(也是唯一?)的方法是使用JNI并通过xlib/xcb实现。但是你可以按照你的要求去做

有一个叫做EWMH的桌面约定可以帮助您实现所需的功能。 您需要执行的步骤的基本顺序是:

  • 获取应用程序的窗口id。为此,谷歌搜索如何在awt中检索窗口句柄/窗口id
  • 接下来,您需要阅读由原子定义的几个“属性”。如果您不知道这是什么,那么google将如何从xlib/xcb中的窗口读取属性
  • EWMH中有一个属性,列出了窗口管理器定义的所有虚拟桌面。 看
  • 将属性设置为应用程序窗口上的属性,查看您希望应用程序所在的虚拟桌面的编号

  • 如果您做的一切都正确并且窗口管理器支持ewmh(大多数都支持)它应该可以工作。

    我已经找到了一种方法,通过KD3 KWin使用窗口id,但我发现发现发现窗口id同样困难。如何获得_NET_VM_DESKTOP属性?我最终通过JIN从Xlib获取窗口id,然后进入KWin来操作框架的桌面设置。