【问题标题】:Programmatically close Java Tray Balloon以编程方式关闭 Java 托盘气球
【发布时间】:2011-09-23 10:43:38
【问题描述】:

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

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

此时,用户需要点击气球或关闭气球,否则消息不会消失。

【问题讨论】:

  • AFAIK 如果用户没有对它做出反应,气泡会在一段时间(可能 5 秒)后消失。
  • 没有人...... 它不去!!!!!!!!!!!

标签: java awt system-tray popup-balloons


【解决方案1】:

我不确定其他平台,但在 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 可能是个坏主意。由于如果用户正在使用机器,消息确实会消失,因此最好不要这样做。

【讨论】:

  • 谢谢Bright。谢谢您的详细解释...那么,有没有其他方法可以显示一些漂亮的菜单,带图标的菜单,透明菜单...??
  • @SaneeshAT,你为什么需要一个?如果您确实需要,上述方法将摆脱气球。然后,您可以立即重新添加托盘图标。无论哪种方式,这是一个单独的问题。如果你需要一个新问题的答案,你应该问一个新问题。如果您喜欢我对原始问题的回答,可以点击旁边的复选标记。
  • 也许你也可以随意移动鼠标,最终让它消失?
  • 另一种选择可能是使用 jna/jni/jnr 或其他选项,枚举活动的桌面窗口,发现你的气球消息,然后向它发送某种关闭消息,我猜:)
  • 删除托盘图标并重新添加即可解决问题,谢谢!
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2011-12-16
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多