让JFace窗口在任务栏中闪烁或引起用户注意?

我想知道有人知道如何解决这个问题:

在我的Java Eclipse插件中,有一些过程需要一些时间。 因此,用户可以最小化窗口并让进程在后台运行
现在,当过程完成时 ,我可以强制窗口再次出现在顶部,但这是可用性的禁忌。 我宁愿让进程在任务栏中 闪烁 。 有没有办法实现这个目标?

我看了一下org.eclipse.jface.window但是找不到那样的东西,SWT文档同样如此……

我想到的另一件事 – 因为人们在mac os xlinux上也使用这个应用程序,是否有一个独立平台的解决方案 ,它将通知用户该过程已经完成但没有将窗口置于顶部?

任何想法都非常欢迎!

编辑:
我发现在Windows上,用户可以调整是否要将力设置为前景。 如果禁用该选项,任务将在任务栏中闪烁…
这是一个很好的阅读 ……

如果有人知道某种平台独立的方式来实现这种行为,请与我分享您的知识!

我不认为这是一种独立于平台的方式。 您必须查看特定于平台的API调用,并通过JNI或JNA实现它们。

对于Windows,这是我自己的一个应用程序的片段:

public static void flashWindow(final Shell shell, boolean flashTray, boolean flashWindow) { try { if (isActiveWindow(shell)) { flashWindow = false; flashTray = false; } User32 lib = (User32) getLibrary("user32", User32.class); User32.FLASHWINFO flash = new User32.FLASHWINFO(); flash.hWnd = new W32API.HANDLE(new W32API.UINT_PTR(shell.handle) .toPointer()); flash.uCount = 2; flash.dwTimeout = 1000; if (flashTray || flashWindow) { flash.dwFlags = (flashTray ? User32.FLASHW_TRAY : 0) | (flashWindow ? User32.FLASHW_CAPTION : 0); } else { flash.dwFlags = User32.FLASHW_STOP; } flash.cbSize = flash.size(); if (lib.FlashWindowEx(flash) && !flashWindow) { final FocusListener focusListener = new FocusListener() { public void focusGained(FocusEvent arg0) { flashWindow(shell, false, false); shell.removeFocusListener(this); } public void focusLost(FocusEvent arg0) { } }; shell.addFocusListener(focusListener); } } catch (UnsatisfiedLinkError e) { } } 

这是getLibrary()的简化版本:

 protected static StdCallLibrary getLibrary(String libraryName, Class interfaceClass) throws UnsatisfiedLinkError { try { StdCallLibrary lib = (StdCallLibrary) Native.loadLibrary(libraryName, interfaceClass); return lib; } catch (UnsatisfiedLinkError e) { Logger.out.error("Could not load " + libraryName + " library."); throw e; } } 

完成后,请小心dispose()库。

嗯,这并不是完全闪烁,但是从Eclipse 3.6 M6开始,您可以使用SWT以独立于平台的方式将文本,图像或进度条覆盖到TaskItem。 请参阅New和Noteworthy以及SWT代码段 。

你可以做些什么来吸引用户的注意力而不是烦人的是改变windows文本,这是一个简单的:

 shellName.setText("task 20% complete") 

这将允许用户在使窗口最小化时获得更新,然后添加焦点监听器以在重新获得焦点时将窗口返回到其正常文本。 这将在通知用户时允许最小的侵入性。

我的插件遇到了类似的问题。

我最终做的是为我的程序在较低状态的dock中创建一个小图标(或者调用底部的任何东西)。 基于流程和其他背景事件的完成,我的图标会改变颜色并闪烁(例如,当初始设置完成时,从灰色变为绿色)。

通过双击或右键单击此图标上下文相关,我可以执行诸如打开相应窗口之类的操作。

Interesting Posts