+2
не обновляется иконка в трее в windows.
известная для виндузятников фича-баг. если эксплорер крашится, то пропадает иконка приложения, сидящего в трее без кнопки на панели задач.
чтобы она вновь появилась в трее, надо что то там обрабатывать, какое то сообщение от винды и восстанавливать иконку.
помнится, когда многие были не в курсе, вытгивали обратно с помощью process explorer от русиновича, там было window->bring to front. но у HK uploader даже окна нет )
сейчас таких приложений (не восстанавливающих иконку после краша эксплорера) я уже не знаю. исправьте пожалуйста этот досадный баг
чтобы воспроизвести (на xp) надо в диспетчере задач сначала убить explorer, а потом снова его запустить оттуда же
Customer support service by UserEcho
думаю что остался, возможно нужно будет выключить aero
сообщения о краше скорее всего и нет, но должно быть какой то системное сообщение типа repaint или типа того.
возможно эти обсуждения на stackoverflow подскажут куда копать
http://stackoverflow.com/questions/8333820/restoring-java-systray-icon-after-explorer-crashes
http://stackoverflow.com/questions/7923645/how-to-re-add-icon-to-system-tray-after-explorer-exe-crash/7923753
https://forums.oracle.com/forums/thread.jspa?threadID=2159870
http://syedgakbar.wordpress.com/2008/07/14/restore-notification-area-icon-after-explorer-crash/
тут по виндовым сообщениям и таксбару
http://msdn.microsoft.com/en-us/library/cc144179(VS.85).aspx#Taskbar_
тут решение для сишников
http://www.tek-tips.com/faqs.cfm?fid=5937
тут пишут, что в java такое не получится сделать, надо делать костыли
http://board.jdownloader.org/showthread.php?p=81757
или стартовать прогу заново и та, обнаружив запущенную копию, даст ей сигнал чтобы восстановить иконку (что мне лично кажется совсем костыльным костылем ))) )
либо тупо удалять/восстанвливать иконку в трее каждые несколько секунд - что более удовлетворительно, если не будет каких то побочных эффектов
если бы вы почитали ссылочку https://forums.oracle.com/forums/thread.jspa?threadID=2159870, то поняли, что проверка иконки в трее через getTrayIcons() не сработает - они после краша остаются на месте и проверка будет говорить что все ок, а в реальности иконки не будет.
по той же ссылке якобы нашли решение через reflections. хотя пожаловались на стабильность работы
try{
Field theField = TrayIcon.class.getDeclaredField( "peer" );
theField.setAccessible( true );
theField.set( myIcon, null );
Method theMethod = TrayIcon.class.getDeclaredMethod( "addNotify", new Class[]{} );
theMethod.setAccessible( true );
theMethod.invoke( myIcon, new Object[]{} );
} catch ( Throwable e ) {
LOGGER.error( "Could not restore system tray icon", e );
}
если это чем то не устроит, то думаю и правда - достаточно дергать иконку при каждом срабатывании глобального хоткея - к примеру ctrl+H (показать окно) или вообще на всех хоткеях. сделал попытку что то с прогой сделать - и иконка перерисовалась. но тогда нельзя будет определить запущена программа или нет ( для чего собственно иконка и нужна чаще всего)
Не прочитал я все топики потому, что ещё не добрался до правки кода и лишь поверхностно просмотрел первые статьи, приведённые вами.
Насчёт решения проблемы - учитывая что однозначного способа определить жива ли ещё иконка или нет (лучше даже сказать - нормальных способов вовсе нет) я бы вовсе не стал добавлять костыли на этот косяк - в итоге выйдет лишь больше проблем.
Единственный действенный способ восстановить иконку (причем достаточно оперативно) - постоянно или же по некоторым действиям обновлять её. При этом будет заметно обновление иконки в трее, если explorer.exe не перезапускался, что весьма неприятно и создаст лишние неудобства для тех, кто не испытывает проблем с перезапуском explorer.exe.
И напоследок хотел спросить - неужели у вас настолько часто "падает" explorer? Работал более четырёх лет на XP - не помню того, чтобы explorer настолько часто давал сбои...