Ícone no SysTray [Resolvido]

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!

1 curtida

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();
    }   
}

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.

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

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!

// 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 …

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.

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

Bruno, obrigado pela ajuda.

Consegui resolver meu problema.

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?