Как создать уведомление Windows на Java

#java #swing #notifications #desktop-application #system-tray

#java #уведомления

Вопрос:

В Windows 10 есть уведомление, которое открывается в правом нижнем углу экрана, и я нахожу их весьма полезными.

Есть ли какой-либо способ создания уведомлений Windows на Java? Вот как они выглядят:

желаемый образец уведомления Windows

Ответ №1:

Я могу успешно получить этот результат, используя этот очень простой пример кода:

скриншот

 import java.awt.*;
import java.awt.TrayIcon.MessageType;

public class TrayIconDemo {

    public static void main(String[] args) throws AWTException {
        if (SystemTray.isSupported()) {
            TrayIconDemo td = new TrayIconDemo();
            td.displayTray();
        } else {
            System.err.println("System tray not supported!");
        }
    }

    public void displayTray() throws AWTException {
        //Obtain only one instance of the SystemTray object
        SystemTray tray = SystemTray.getSystemTray();

        //If the icon is a file
        Image image = Toolkit.getDefaultToolkit().createImage("icon.png");
        //Alternative (if the icon is on the classpath):
        //Image image = Toolkit.getDefaultToolkit().createImage(getClass().getResource("icon.png"));

        TrayIcon trayIcon = new TrayIcon(image, "Tray Demo");
        //Let the system resize the image if needed
        trayIcon.setImageAutoSize(true);
        //Set tooltip text for the tray icon
        trayIcon.setToolTip("System tray icon demo");
        tray.add(trayIcon);

        trayIcon.displayMessage("Hello, World", "notification demo", MessageType.INFO);
    }
}
  

Комментарии:

1. Один вопрос, как бы мне установить восклицательный знак для его собственной текстуры, я видел другие уведомления с пользовательскими файлами png в виде значков.

2. Не похоже, что это возможно — похоже, что эта функция недоступна в AWT, возможно, она доступна только в собственных наборах инструментов Windows gui.

3. В настоящее время уведомление удаляется из центра действий после истечения срока его действия. Есть ли способ сохранить его там?

4. Супер ответ. Есть ли способ остановить значок в системном трее от предотвращения выхода JVM?

5. @JohannesBrodwall если вы удалите trayIcon из tray ( tray.remove(trayIcon) ), JVM завершит работу. Имейте в виду, что если вы удалите его, пока уведомление все еще открыто, уведомление волшебным образом исчезнет.

Ответ №2:

Этого можно достичь с помощью классов SystemTray и TrayIcon. Кроме того, если это новый для вас API, вы можете проверить специальное руководство «Как использовать системный трей«.

Ответ №3:

вы можете легко использовать уведомления с javafx с помощью класса уведомлений java.lang.Объект org.controlsfx.control.Уведомления

 public static showNotification(String title,String text){
Notifications notificationTest=Notifications.create();
notificationTest.position(Pos.BASELINE_RIGHT);
notificationTest.title(title);
notificationTest.text(text);
notificationTest.show();//for error noti notificationTest.showError();
  

}

 https://www.javadoc.io/static/org.controlsfx/controlsfx/8.40.16/org/controlsfx/control/Notifications.html