2009-01-28 15 views

risposta

12

Non so se si applica alle versioni più recenti di Windows, ma il metodo .toFront() utilizzato per eseguire il flash della finestra se nessuna delle finestre della VM corrente era in primo piano.

Ciò significa che la chiamata frame.toFront() su un telaio ridotto al minimo sarebbe sempre rendere Flash ...

+5

C'è un aspetto negativo di questo approccio. Se un utente si trova nell'applicazione, digitando un JTextArea, ad esempio, questa funzionalità rimuove lo stato attivo e interrompe la digitazione. –

0

Utilizzando Swing di per sé, molto probabilmente non è possibile; questa è una cosa specifica dei Widnows.

+0

Uh, e? La barra delle applicazioni di Windows è ancora specifica per Windows. –

1

Puoi forza-ridurre al minimo il GUI e .toFront -en esso:

 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!! 

che purtroppo rimuoverà il focus dalla finestra attiva. Potresti scoprire la finestra attiva e riattivarla in seguito. Ma comunque, il lampeggio durerà solo per circa tre secondi.

... o scendere alla radice del problema utilizzando una DLL -call su FlashWindow. Chiamare le DLL non è possibile con il codice Java pulito, avrete bisogno dell'aiuto di altri linguaggi di programmazione, possibili ad es. con JNA. Oltre a questo, puoi anche scrivere il tuo programma in un'altra lingua e chiamarlo dalla tua applicazione Java. Ti do un esempio in AutoHotkey di seguito:

Codice AutoHotkey:

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) 

compilato in un file chiamato flash.exe, mettere nella vostra directory di lavoro Java, si può chiamare da qualsiasi funzione:

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

In alternativa, è possibile utilizzare AutoHotkey.dll e accedervi all'interno del Javacode (ci sono delle guide su come farlo su Internet), quindi non ci sarebbe bisogno di alcun file exe esterno.

Se si riscontrano ancora problemi nel lampeggiare nella barra delle applicazioni di Windows, faccelo sapere!

0

Il modo migliore per farlo:

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