2009-01-28 24 views

回答

12

我不知道它是否適用於較新版本的Windows,但如果當前虛擬機的窗口都不在前臺,則使用.toFront()方法來刷新窗口。

這意味着一個最小化的框架調用frame.toFront()總是會讓它閃爍......

+5

有一個缺點這種方法。例如,如果用戶在應用程序中,輸入JTextArea,則此功能會消除焦點並中斷打字。 – 2012-05-25 20:15:21

0

使用Swing本身,你很可能不能;這是一個Widnows特定的事情。

+0

呃,和? Windows任務欄仍然是特定於Windows的。 – 2009-01-29 04:47:12

1

您可以力減少你的GUI和.toFront -en它:

 Gui.frame.setState(Frame.ICONIFIED); 
     for (int i = 0; i < 3; i++) { 
      Thread.sleep(10); 
      Gui.frame.toFront(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(false); 
      Thread.sleep(10); 
      Gui.frame.toBack(); 
      Thread.sleep(10); 
      Gui.frame.setVisible(true); 
     } 
     // be creative!! 

這可悲的是將活動窗口中刪除焦點。你可以找出活動窗口並在之後重新激活它。但是,閃光燈只能持續約三秒鐘。

......或者通過使用DLL -call on FlashWindow找到問題的根源。使用乾淨的Java代碼無法調用dll,您需要其他編程語言的幫助,例如,與JNA。除此之外,您還可以使用其他語言編寫自己的程序,並從Java應用程序中調用它。我將在AutoHotkey的下面給出一個例子:

的AutoHotkey代碼:

Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\""); 

if 0 != 1  ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length 
    { 
     msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed. 
     ExitApp 
    } 
    programName = %1% 
    winget, hWnd, ID, %programName% 
    DllCall("FlashWindow",UInt,hWnd,Int,True) 

編譯成一個名爲flash.exe文件,把你的Java工作目錄,你可以從任何函數調用它

或者,可以使用AutoHotkey.dll並在Java代碼中進行訪問(有關如何在Internet上執行操作的指南),因此不需要任何外部exe文件。

如果您在實現Windows任務欄中的閃爍時仍遇到問題,請告訴我!

0

最好的方式做到這一點:

if (!isFocused()) { 
     setVisible(false); 
     setVisible(true); 
    }