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