Dificuldade com JPopUpMenu

bom pessoal estou desenvolvendo um sistema de backup que tera a funcao de backup programado, ou seja o usuario para configurar um determinada hora para que o sistema realiza o backup dos arquivos desejados.

para isso estou utilizando tray icon, para deixar o sistema aberto, trabalhando em segundo plano e aguardando a hora de fazer o backup. bom, minha duvida é que estou utilizando jpopmenu para exibir as opções do trayicon e nao consigo encontrar um solução para fechar o popup quando o usuario clicar fora do popup…

tipo, ja tentei utilizar varios eventos mas só funcionam quando clico no proprio trayicon… alguem saberia como fazer tipo, para quando ao clicar com o mouse, se nao fou no popup ou no trayicon eu chamar um setvisible(false) ou algo parecido e esconder o popup?

Ola!
Criei uma aplicação simples e espero que te ajude!
Estou usando PopupMenu e nao JPopupMenu.
Não se esqueça de colocar um icone na pasta onde estiver esta classe, com o nome “icone” e a extensão PNG, ou altere o nome do icone no codigo.

import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

/**
 * Esta classe cria um frame vazio e um trayicon, ao clicar com o botao
 * direito do mouse no tryicon, voce pode abrir o frame ou fechar a aplicação.
 * Ao clicar com o botao direito do mouse no trayicon, um menu é aberto e ao
 * se clicar em qualquer lugar na tela este menu é fechado.
 *
 * Atenção: Coloce um icone na pasta onde se encontra esta classe, de
 * preferencia com o nome "icone" e a extensão PNG, ou altere o nome do icone
 * aqui no codigo.
 * @author Carlaum
 */
public class ExemploTrayMenu extends JFrame
{
    PopupMenu popUp;
    ImageIcon icone;
    TrayIcon trayIcon;

    public ExemploTrayMenu()
    {
        this.setTitle("Exemplo de TrayIcon");
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setSize(640, 480);
        this.setLocationRelativeTo(null); // Faz a janela ser criada no centro da tela
        this.criaMenu();

        icone = new ImageIcon(getClass().getResource("icone.png")); //coloque um icone na pasta onde esta essa classe!
        trayIcon = new TrayIcon(icone.getImage(),
                                "Visualizador de logs Daiken",
                                popUp);
        SystemTray tray = SystemTray.getSystemTray();
        try
        {
            tray.add(trayIcon);
        }
        catch (AWTException aWTException)
        {
        }

        this.setVisible(true);
    }

    private void criaMenu()
    {
        popUp = new PopupMenu();

        MenuItem item1 = new MenuItem("Abrir");
        item1.addActionListener(
                new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {
                        getInstance().setVisible(true);

                    }
                });

        MenuItem item2 = new MenuItem("Sair");
        item2.addActionListener(
                new ActionListener()
                {

                    public void actionPerformed(ActionEvent e)
                    {
                        //miSairActionPerformed();
                        System.exit(0);
                    }
                });
        popUp.add(item1);
        popUp.addSeparator();// adiciona uma linha no popupMenu
        popUp.add(item2);
    }

    public JFrame getInstance()
    {
        return this;
    }

    public static void main(String args[])
    {
        new ExemploTrayMenu();
    }
}