Ícone no SysTray [Resolvido]

9 respostas
F

Alguém pode me dar algumas instruções de como coloco o meu sistema, carregar, quando o computador é utilizado, ao lado do relógio do windows, no Systray e ficar executando em segundo plano?

Consegui alguns exemplos aqui na busca do fórum mas estou encontrando dificuldades.

Agradeço a todos!

9 Respostas

B

Segue o código de um tutorial que eu encontrei em http://www.devmedia.com.br/articles/viewcomp.asp?comp=1817

import java.awt.event.*;
import javax.swing.*;
import org.jdesktop.jdic.tray.*;

public class TestTray {
    public static JMenuItem quit;
    
    public TestTray() {
        JPopupMenu menu = new JPopupMenu("Tray Icon Menu");
        menu.add(new JMenuItem("Test Item"));
        menu.addSeparator();
        JMenuItem quitItem = new JMenuItem("Quit");
        quitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.exit(0);
            }});
        menu.add(quitItem);
        
        // O arquivo ?devmedia.gif? deve existir no mesmo diretório

        // onde estiver esta classe.
        ImageIcon icon = new ImageIcon("duke.gif");
        TrayIcon ti = new TrayIcon(icon, "JDIC Tray Icon API Test", menu);

        // Ação para clique com botão esquerdo.
        ti.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, 
                    "JDIC Tray Icon API Test!", "About",
                    JOptionPane.INFORMATION_MESSAGE);
            }
        });
               
        SystemTray tray = SystemTray.getDefaultSystemTray();
        tray.addTrayIcon(ti);
    }

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

Já testei este exemplo.

Fiz assim, baixei o arquivo jdic-20060613-bin-cross-platform e adicionei o jdic.jar no meu projeto. Ao rodar dá este erro:

Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0 at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:999) at java.awt.image.BufferedImage.<init>(BufferedImage.java:321) at org.jdesktop.jdic.tray.internal.impl.WinTrayIconService.updateIcon(Unknown Source) at org.jdesktop.jdic.tray.internal.impl.WinTrayIconService.addNotify(Unknown Source) at org.jdesktop.jdic.tray.internal.impl.WinSystemTrayService.addTrayIcon(Unknown Source) at org.jdesktop.jdic.tray.SystemTray.addTrayIcon(Unknown Source) at Sistray.<init>(Sistray.java:33) at Sistray.main(Sistray.java:37)

O que será que é?

E Bruno, somente com esta classe minha aplicação já vai ficar rodando lá no barra perto do relógio, porque em nenhum momento indiquei nenhuma classe dizendo o que eu queria que rodasse lá.

Agradeço.

B

Bom dia fernandoeick,

Eu nunca usei o SystemTray … por isso não posso afirmar com certeza, porém eu acho que no main da sua aplicação você deverá inserir a seguinte linha:

Qual a versão do java que você está usando ?
parece que o SystemTray só funciona a partir da 6 …
da uma atualizada na versão do java… e fala se deu certo …

Espero ter ajudado…
Flw

F

Certo Bruno.

Rodou, com as suas dicas. Porém, não acontece o que deveria. A aplicação roda, mas o tal do ícone não aparece lá.

Eu criei um projeto separado, que roda somente esta classe. Devo fazer isto de maneira diferente?

Agradeço!

B

// O arquivo ?devmedia.gif? deve existir no mesmo diretório ImageIcon icon = new ImageIcon("duke.gif");

a String com o endereço da imagem está com o caminho correto ?
pode ser por isso que o ícone não está aparecendo …
Vê se é isso …

F

Não era isso não. A imagem está correta.

Mas como eu faço para esta classe carregar o que eu realmente quero, porque a única coisa que ela está fazendo é colocar um ícone lá em baixo.

Agradeço.

B

Opa…
depende do que você quer fazer …
no exemplo que eu te mostrei …
era só para colocar um item no systemTray … e se você clicar com o botão direito nele e apertar “Quit” ele encerra a aplicação …
você pode inserir mais items no menu que aparece quando você clica no ícone, atribuindo a eles várias utilidades…

porém você pode colocar para ele fazer outras coisas… isso vai depender de como você implemente isso…

Espero ter ajudado

F

Bruno, obrigado pela ajuda.

Consegui resolver meu problema.

geidivan

O que você fez para resolver?

O meu está dando erro na seguinte linha:

SystemTray tray = SystemTray.getDefaultSystemTray();

Aparece a seguinte mensagem:

Exception in thread "AWT-Event-Queue-0" java.lang.UnsatisfiedLinkError: no  tray in java.library.path

O que pode ser isso?

Criado 1 de fevereiro de 2008
Ultima resposta 14 de jan. de 2009
Respostas 9
Participantes 3