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

以编程方式关闭Java托盘气球,java,awt,system-tray,popup-balloons,Java,Awt,System Tray,Popup Balloons,我正在使用java.awt.SystemTray创建和管理托盘图标和气泡消息。一切正常 但我想知道在信息显示后是否可以关闭或淡入淡出 现在,用户需要单击气球或将其关闭,否则消息将不会消失。我不确定其他平台,但在Windows上,只有当机器正在使用时,消息才会消失-即,如果用户正在键入内容或移动鼠标。如果不移动鼠标或键入任何内容,消息将保留在原来的位置 下面的代码为我显示了一条消息。如果我移动鼠标,它会在大约5秒钟后消失。如果我不这样做,它会一直存在,直到我移动鼠标或键入某个内容时,它才会消失 f

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

AFAIK如果用户对气泡没有反应,气泡会在一段时间后(5秒)消失。没有人。。。它不走!!!!!!!!!!!谢谢你,布莱特。谢谢你的详细解释。。。那么,有没有其他方法可以显示一些漂亮的菜单,带图标的菜单,透明的菜单…?@SaneeshAT,你为什么需要一个呢?如果你真的需要的话,上面的方法可以去掉气球。然后,您可以立即重新添加托盘图标。不管怎样,这都是一个单独的问题。如果你需要答案,你应该问一个新问题。如果您喜欢我对您原始问题的回答,您可以单击旁边的复选标记。也许您也可以随意稍微移动鼠标,这将导致它最终消失?另一个选项可能是使用jna/jni/jnr或其他什么,枚举active desktop窗口,发现您的气球消息,并向它发送某种形式的关闭消息,我想:)删除托盘图标并重新添加它将解决问题,谢谢!