以编程方式关闭Java托盘气球



我使用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可能是一个坏主意。因为如果用户正在使用机器,消息不会消失,所以最好不要这样做。

相关内容

  • 没有找到相关文章

最新更新