Ich entwickle eine Swing-Anwendung und ich muss die Windows-Taskleiste blinken. Ich kann frame.requestFocus()
nicht verwenden, weil ich den Fokus von keiner anderen Anwendung stehlen möchte.
Ich weiß nicht, ob es für neuere Versionen von Windows gilt, aber die Methode .toFront (), die verwendet wird, um das Fenster zu flashen, wenn sich keines der Fenster der aktuellen VM im Vordergrund befindet.
Dies bedeutet, dass das Aufrufen von frame.toFront () auf einem minimierten Frame immer zu einem Flash machen würde ...
JNIWrapper mit seiner Winpack-Erweiterung kann tun, was Sie wollen.
Die Demo auf der Website zeigt es in Aktion.
Sie können entweder Ihre GUI und .toFront
-en es erzwingen:
was leider den Fokus aus dem aktiven Fenster entfernt. Sie können das aktive Fenster herausfinden und es später wieder aktivieren. Trotzdem dauert das Blinken nur etwa drei Sekunden.
... oder gehen Sie zum eigentlichen Kern der Sache, indem Sie eine DLL -Ruf auf FlashWindow
verwenden. Das Aufrufen von dlls ist nicht mit sauberem Java-Code möglich, Sie benötigen die Hilfe anderer Programmiersprachen, z. mit JNA . Ansonsten könnten Sie auch Ihr eigenes Programm in einer anderen Sprache schreiben und es von Ihrer Java-Anwendung aus aufrufen. Ich gebe ein Beispiel in AutoHotkey unten:
AutoHotkey-Code:
%Vor% kompiliert in eine Datei namens flash.exe
, die Sie in Ihr Java-Arbeitsverzeichnis einfügen, können Sie es von einer beliebigen Funktion aufrufen:
Alternativ könnte man die AutoHotkey.dll verwenden und auf diese innerhalb des Javacodes zugreifen (es gibt Anleitungen, wie man es im Internet macht), so dass keine externen exe-Dateien benötigt werden.
Wenn Sie immer noch Probleme haben, das Blinken in der Windows-Taskleiste zu erreichen, lassen Sie es mich bitte wissen!
Wenn Sie Swing per se benutzen, können Sie sehr wahrscheinlich nicht; das ist eine Widnows-spezifische Sache.
Tags und Links java swing taskbar windows-taskbar