どのように私は、Swingを使用して、Windowsのタスクバーをフラッシュすることができますか?

StackOverflow https://stackoverflow.com/questions/489255

  •  20-08-2019
  •  | 
  •  

質問

私は、Swingアプリケーションを開発していると私は、Windowsのタスクバーを点滅する必要があります。私は他のアプリケーションからフォーカスを盗むためにしたくないので、私はframe.requestFocus()を使用することはできません。

役に立ちましたか?

解決

は、Windowsの新しいバージョンに適用されるかどうかは知りませんが、.toFront()メソッドは、現在のVMのウィンドウのどれがフォアグラウンドでなかった場合は、ウィンドウをフラッシュするために使用さています。

このは最小限に抑えフレームにframe.toFront()を呼び出すと、常に...それが点滅になるだろうことを意味します。

他のヒント

JNIWrapperそのwinpack拡張子を持つのは、あなたがやりたいことができます。

サイト上のデモは、アクションでそれを示しています。

あなたはどちらかあなたのGUIと.toFrontエンそれを強制的に最小限に抑えることができます:

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

これは悲しげにアクティブウィンドウからフォーカスを削除します。あなたは、アクティブなウィンドウを見つけると、後でそれを再アクティブ化できます。しかし、それでもまだ、点滅は約3秒間持続します。

...またはFlashWindowに-call のの DLLを使用して問題の本当に根に取り掛かります。 DLLを呼び出すと、クリーンなJavaコードでは不可能である、あなたは他のプログラミング言語の助けが必要になります、可能性など JNA を持ちます。それ以外に、あなたはまた、別の言語で独自のプログラムを書いて、Javaアプリケーションから呼び出すことができます。私は下のAutoHotkeyをで例をあげるます:

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)

flash.exeと呼ばれるファイルにコンパイルしてJavaの作業ディレクトリに入れ、あなたは任意の関数からそれを呼び出すことができます:

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

あるいは、AutoHotkey.dllとJavacode(インターネット上でそれを行う方法についてのガイドがあります)内のアクセスを、使用することができますので、任意の外部のexeファイルは必要ないと思います。

あなたはまだ、Windowsのタスクバーで点滅を達成する問題が発生した場合は、

は、私に知らせてください!

これを行うための最善の方法:

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

それ自体スイング使用して、あなたは非常におそらくことはできません。それは、Windowsの特定のことだ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top