Восстановление пиктограммы Java systray после сбоев проводника - PullRequest
1 голос
/ 01 декабря 2011

Я видел много вопросов относительно этой проблемы, но ни у одного из них не было решения. Моя проблема: Я написал небольшое Java-приложение со значком systray. Когда происходит сбой проводника Windows (его можно смоделировать с остановкой процесса explorer.exe), после его восстановления мой значок в системном окне исчезает, но процесс моего приложения продолжается.

Есть ли способ восстановить мою иконку после перезагрузки explorer.exe?

Моя проблема в том, что у меня нет окна, к которому я иду. Сам мой systray является средством запуска некоторых команд. Мне нужно что-то, что слушает воссоздание панели задач Windows, а затем я могу добавить его снова.

1 Ответ

0 голосов
/ 01 декабря 2011

Я бы порекомендовал заново зарегистрировать иконку в трее в событии активации окна.Таким образом, иконка в трее будет обновляться каждый раз, когда вы снова переключаетесь на свое приложение.Например:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyApp extends JFrame
{
   private static TrayIcon trayIcon = null;

   public static void main(String[] args) {
      JFrame app = new MyApp();
      app.setSize(400,400);
      app.setVisible(true);

      final Image image = Toolkit.getDefaultToolkit().getImage("MyImage.gif");

      app.addWindowListener( new WindowAdapter() {
         public void windowActivated(WindowEvent ev) {
            registerTrayIcon(image);
         }
      });
   }

   private static void registerTrayIcon(Image image) {
        SystemTray tray = SystemTray.getSystemTray();

        if( trayIcon != null ) {
           tray.remove(trayIcon);
        }

        trayIcon = new TrayIcon(image, "Tray Demo", null);

        try {
           tray.add(trayIcon);
        }
        catch(Exception ex) {
           throw new RuntimeException(ex);
        }
   }
}
...