как добавить слушателя к значку док-станции Java на OSX

у меня есть в моих приложениях jframe Hide при закрытии, но когда я нажимаю значок док-станции, я хочу, чтобы он устанавливалVisible (true); как добавить прослушиватель действий к значку в доке? Я старался

Image im = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("SLogo.png"));
final TrayIcon tri = new TrayIcon(im);
tri.addActionListener(this);

@Override
public void actionPerformed(ActionEvent ae) {
     this.setVisible(true);
     System.out.print("ok");

}

но он не срабатывает, а также, как это повлияет на приложение на компьютере с Windows?


person Dima    schedule 06.05.2013    source источник


Ответы (1)


Вам нужно использовать AppForegroundListener и/или AppReOpenedListener. См. этот пример:

public static void main(String[] args)
{
    final JFrame frame = new JFrame();

    Application app = Application.getApplication();
    app.addAppEventListener(new AppForegroundListener() {

        @Override
        public void appMovedToBackground(AppForegroundEvent arg0)
        {
            System.out.println("appMovedToBackground");
        }

        @Override
        public void appRaisedToForeground(AppForegroundEvent arg0)
        {
            System.out.println("appRaisedToForeground");
            frame.setVisible(true);
        }

    });

    app.addAppEventListener(new AppReOpenedListener() {
        @Override
        public void appReOpened(AppReOpenedEvent arg0)
        {
            System.out.println("app reoponed");
            frame.setVisible(true);
        }
    });

    frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);
}

Если вы разрабатываете для Windows, вам нужно будет включить заглушки классов Mac/Java, иначе вы получите ошибки компилятора. См. здесь.

Если вы разрабатываете на Mac, просто убедитесь, что код не выполняется при работе в Windows.

person martinez314    schedule 07.05.2013
comment
он работает только тогда, когда я фокусируюсь на другом приложении, он не слушает щелчок по значку док-станции - person Dima; 08.05.2013
comment
@DimaGoltsman См. исправленный ответ. Вам понадобится AppReOpenedListener. - person martinez314; 08.05.2013