3

java.awt.SystemTrayトレイ アイコンとバルーン メッセージの作成と管理に使用しています。すべて正常に動作します。

しかし、メッセージが表示された後、メッセージを閉じるかフェードアウトできるかどうかを知りたいです。

現時点では、ユーザーはバルーンをクリックするか閉じる必要があります。そうしないと、メッセージが消えません。

4

1 に答える 1

2

他のプラットフォームについてはよくわかりませんが、Windowsでは、マシンが使用中の場合、つまりユーザーが何かを入力したりマウスを動かしたりしている場合にのみ、メッセージが消えます。マウスを動かしたり何も入力しなかった場合、メッセージはそのままになります。

次のコードは私へのメッセージを示しています。マウスを動かすと、約5秒後に消えます。そうしないと、マウスを動かしたり何かを入力したりするまでその状態が続き、その時点で消えます。

final TrayIcon ti = new TrayIcon(XTPSkin.getInstance().getAppIcon().getImage());
final SystemTray st = SystemTray.getSystemTray();
st.add(ti);
ti.displayMessage("foo", "bar", MessageType.INFO);

時間切れになる前にメッセージを直接削除する方法はありませんが、削除することはできますTrayIcon(また、必要に応じてすぐに再追加しますが、これは実際には推奨されません)。原因を削除するTrayIconと、メッセージも削除されます。

上記に追加された次のコードにより、TrayIconとメッセージの両方が削除されます。

SwingUtilities.invokeLater(new Runnable(){
    public void run() {
        try {
            Thread.sleep(1000); // Don't do this
            st.remove(ti);
        } catch (InterruptedException ie) {
            // You won't need this when the sleep is removed
        }
    }
});

ノート:

  • 上記のコードの最初のブロックを、次の例外処理でラップする必要があります。AWTException
  • 2番目のブロックのThread.sleepは、デモンストレーションのみを目的としています。このコードはAWTスレッドで実行されるため、実際のコードにそのスリープを含めないでください。
  • この方法で継続的に削除および再追加することはTrayIcon、おそらく悪い考えです。ユーザーがマシンを使用している場合はメッセージ消えるので、これを行わない方がおそらく賢明です。
于 2011-09-23T14:13:04.313 に答える