1

我们有一个在 Linux 机器上运行的全屏 java 程序。该程序一直在运行,这是 Linux 机器存在的主要原因。

我们有一堆可以通过下拉菜单打开的程序的 PDF 帮助文件。当用户单击帮助菜单项之一时,我们通过以下方式打开 XPDF

    final Runtime rt = Runtime.getRuntime();
    final String cmd = "runxpdf.sh";
    rt.exec(cmd);

这一切都很好,除了如果用户在 XPDF 查看器运行时单击我们的程序,它将落后于我们的全屏程序显示。

我们希望能够做的是让 XPDF 程序始终保持在最前面,直到它关闭。这可以通过从 Java 执行程序来实现吗?

4

2 回答 2

2

问题是您需要与另一个程序(窗口管理器)进行通信,以指示该程序保持窗口升起。

在基于 X 窗口的系统中,曾经有一个名为的工具wmctrl,它可以向当前窗口管理器发出请求和查询,前提是它是一个兼容的窗口管理器。使用这样的工具,我的结果好坏参半。在大约 20 个 Linux 窗口管理器中,最受欢迎的那些在处理请求方面做得更好(也许这就是它们受欢迎的原因?)。

将桌面切换到窗口,提升和聚焦的命令是

wmctrl -i -a <Window Id>

获取由窗口管理器管理的窗口列表

wmctrl -l

虽然这不能保证“总是在顶部”,但您可以编写一个Thread循环来检查并重新启动一个窗口。

至于 Windows 解决方案,其他人将不得不对此发表评论。

于 2012-07-24T16:27:36.110 回答
2

有点切线,但我认为值得一试 - 您是否考虑过直接从 Java 显示 PDF?然后,您可以更好地控制窗口,例如使用 JFrame 的 setAlwaysOnTop(boolean)。此处讨论了一些 PDF 显示选项。

于 2012-07-24T20:08:05.827 回答