System Tray

Bom dia! Estou com dificuldades em resolver alguns pequenos detalhes de uma aplicação que estou desenvolvendo aqui para a minha empresa. Tenho um System Tray que deve notificar o usuário quanto a chegada de e-mail, chat, recado e outras notificações pertencentes a empresa. O System Tray já está pronto (conforme código abaixo) mas quando o usuário é notificado deve gerar uma informação no ícone e ao clicar nesta janela deverá abrir um pop-up e listar os eventos. Aí está minha dúvida, no código não estou conseguindo inserir um frame com uma lista. Será que alguém pode me explicar com “chamo” este frame, pois no código abre uma janela de mensagem e confirmação.

[code]import java.awt.AWTException;
import java.awt.CheckboxMenuItem;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

/**
*
*

  • @author Mario Jorge Pereira
    **/
    public class Exemplo {

    /**

    • Representa o tray icon
      **/
      private TrayIcon trayIcon;

    public Exemplo() {

     //Verifica se o S.O. suporta tray icon
     if (SystemTray.isSupported()) {
    
         //Obtem a bandeja do S.O.
         SystemTray tray = SystemTray.getSystemTray();
    
         //Carregando a imagem tray.gif
         Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");
    
         //ação de executar
         ActionListener actionListener = new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 JOptionPane.showMessageDialog(null, "Executar");
             }
         };
    
         //ação de sair
         ActionListener sairListener = new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 JOptionPane.showMessageDialog(null, "Sair");
                 System.exit(0);
             }
         };
    
         PopupMenu popup = new PopupMenu();
    
         //Opção executar
         MenuItem executarItem = new MenuItem("Executar");
         executarItem.addActionListener(actionListener);
         popup.add(executarItem);
    
         //submenu
         PopupMenu submenu = new PopupMenu("sub-menu");
         popup.add(submenu);
         //checkbox
         submenu.add(new CheckboxMenuItem("Check box"));
    
         //Opção sair
         MenuItem sairItem = new MenuItem("Sair");
         sairItem.addActionListener(sairListener);
         popup.add(sairItem);
    
         // Criando o tray icon e colocando o popup para o clique com o botão direito
         trayIcon = new TrayIcon(image, "Exemplo - tooltip ", popup);
    
         //Auto-ajuste do tamanho
         trayIcon.setImageAutoSize(true);
         //Registrando o escutador para evento de clique com o botao esquerdo
         trayIcon.addActionListener(actionListener);
    
    
         try {
             tray.add(trayIcon);
             //balão de aviso
             trayIcon.displayMessage("IntranetMaker", "Chegaram novas solicitações!", TrayIcon.MessageType.INFO);
         } catch (AWTException e) {
             System.err.println("TrayIcon não pode ser adicionado no sistema.");
         }
     } else {
         System.err.println("Bandeja do sistema não é suportado.");
     }
    

    }

    public static void main(String[] args) {
    Exemplo exemplo = new Exemplo();
    }
    }
    [/code]

Estou com um problema parecido: eu fiz um robozinho que monitora o IP do cliente. Mas ele rodava invizível e fiz um tray… aí o cliente pode saber quando está sendo monitorado e decide se quer ou não pelo tray. Funciona assim: o tray chama outra classe e esta executa a função de monitoramento. Meu problema é que não consigo fechar a outra classe, só a do tray =P… devo ta errando no obvio mas se alguem souber me da um toke que fico mto grato ^^.

qnto ao seu problema, vejamos. Como vc pretende chamar? Sugiro que faça o seguinte: no jar do seu tray, coloque as classes que vc deseja chamar. Faça esse jar ser “executavel”(qndo vc clica ele executa determinada classe), essa classe principal instancia a classe a ser chamada, e invoca:
instancia.método();
pronto, vc consegue chamar sua lista :wink:

Espero ter ajudado

para sair fiz um método sair na classe robozinho e no tray chamei:
robozinho.sair(); mas ele sai de tudo e não apenas do robozinho! Alguem sabe como fecho a classe que eu chamei ( e não a própria classe?)
Obrigado^^

Agradeço a sua ajuda mas não é bem isso, o que eu queria eera fazer com que a janela de mensagem que aparece ao ser clicado, deverá ser uma lista e por isso não estou conseguindo fazer isso.

uma lista “pura”? Sem um jframe?

Dentro do Jframe uma lista que será " preenchida" via webservice. Não consigo fazer esta tela aparecer pra mim, pois só aparece uma mensagem de INFO. sE PUDER ME AJUDAR…