我不知道有人知道如何解决这个问题:
在我的Java Eclipse插件中,有些过程需要一些时间。因此,用户可能会 最小化窗口* 并使 进程在后台运行 。 现在,当 过程完成时 ,我可以强制窗口再次回到顶部,但这在可用性上是不行的。我希望该过程在 任务栏中 闪烁 。有什么办法可以做到这一点? *
我看了一下 org.eclipse.jface.window但找不到类似的东西,SWT文档也是如此…
我想到的另一件事-当人们也在 mac os x 和 linux 上使用此应用程序时,是否存在 平台无关的解决方案 ,该 解决方案 将通知用户该过程已完成,但没有弹出窗口?
任何想法都非常欢迎!
编辑: 我发现,在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():
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()完库后,请多加注意。
dispose()