Программно закрыть Java Tray Balloon - PullRequest
3 голосов
/ 23 сентября 2011

Я использую java.awt.SystemTray для создания и управления значком в трее и всплывающими сообщениями.Все отлично работает

Но я хотел бы знать, возможно ли закрыть или скрыть сообщение после его отображения.

В данный момент пользователю необходимо щелкнуть всплывающее окно или закрыть его, в противном случае сообщениене уйдет.

1 Ответ

2 голосов
/ 23 сентября 2011

Я не уверен насчет других платформ, но в 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 таким образом, вероятно, является плохой идеей. Поскольку сообщение действительно исчезает, если пользователь использует аппарат, вероятно, разумнее этого не делать.
...