2016-01-18 5 views
6

Мой Java приложение показывает свою иконку в системном трее, используя код, который выглядит более или менее, как это:Пустой значок в Windows 10 уведомления

Toolkit mainToolkit = Toolkit.getDefaultToolkit(); 
SystemTray mainTray = SystemTray.getSystemTray(); 
Image trayIconImage = mainToolkit.createImage(getClass().getResource(resourcePath)); 
TrayIcon mainTrayIcon = new TrayIcon(trayIconImage); 
mainTray.add(mainTrayIcon); 

Иногда я изменить это значок, как это:

Image newImage = mainToolkit.createImage(getClass().getResource(otherPath)); 
mainTrayIcon.setImage(newImage); 

время от времени моего приложения с нужно показать некоторые уведомления (с использованием сообщения Baloon Исходя из его значка в трее):

mainTrayIcon.displayMessage(someCaption, msg, TrayIcon.MessageType.NONE); 

Весь этот код на самом деле каким-то образом упрощен, но прекрасно понимает эту функциональность.

Итак, все в порядке в Windows 7. Но оказывается, что в Windows 10 оно отображается по-разному. В уведомлении есть значок, показанный слева. Обычно это текущий значок на панели задач моего приложения, но иногда это просто пустое:

The erroneous notification

В верхнем красном круге (на уведомлении) является то, что пустым значок, который иногда появляется вместо значка моего приложения (в нижней части красный круг, на лотке системы). Я понятия не имею, почему это происходит. Все, что я знаю, это происходит только тогда, когда значок и значок уведомлений приложения изменяется до того, как первое уведомление (которое всегда показывает его значок правильно) исчезает. Если уведомление отображается, затем затухает/закрывается вручную И ТОЛЬКО Имена и уведомления в приложении в трее приложения, следующее уведомление (с новым сообщением, которое было только что установлено) покажет значок приложения правильно.

ответ

0

Просто наткнулся на эту проблему и нашли правильное решение:

mainTrayIcon.setImageAutoSize(true);

Вот метод для отправки уведомления о Windows:

public static void sendNotification(String title, String subtitle, String pathToIcon) { 
    SystemTray mainTray = SystemTray.getSystemTray(); 
    Image trayIconImage = Toolkit.getDefaultToolkit().getImage(pathToIcon); 
    TrayIcon mainTrayIcon = new TrayIcon(trayIconImage); 
    mainTrayIcon.setImageAutoSize(true); 
    try { 
     mainTray.add(mainTrayIcon); 
     mainTrayIcon.displayMessage(title, subtitle, TrayIcon.MessageType.NONE); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Calling sendNotification("Title", "Subtitle", "icons/icon-128.png"); показывает

Working notification

+0

Извините за поздний ответ, но я долго не мог работать над этим приложением. Я просто проверил его сейчас, и он не работает. Кроме того, ваш ответ подразумевает добавление нового значка в лоток каждый раз, и они продолжают умножаться каждый раз, так что это не то, чем я был в любом случае. Мне нужно просто изменить изображение значка в трее, вот и все. – PookyFan