我正在使用java.awt.SystemTray创建和管理任务栏图标和气球消息。一切正常。

但是我想知道在显示消息后是否可以关闭或淡入淡出消息。

现在,用户需要单击气球或将其关闭,否则消息不会消失。

最佳答案

我不确定其他平台,但是在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加上一些异常处理
  • 第二个块中的Thread.sleep严格用于演示目的。由于此代码将在AWT线程上执行,因此您不应在实际代码中包括该睡眠。
  • 以这种方式连续删除并重新添加TrayIcon可能是一个坏主意。由于如果用户正在使用机器,该消息确实会消失,所以最好不要这样做。
  • 09-30 00:37