import java.awt.AWTException; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Image; 
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 java.net.URL; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TrayIconDemo 
{ 

    private final static SystemTray tray = SystemTray.getSystemTray(); 

    private static TrayIcon trayIcon; 

    public static void main(String[] args) 
    { 
        URL javaCupIconUrl = Class.class 
                .getResource("/javax/swing/plaf/basic/icons/JavaCup16.png"); 
        Image trayImage = new ImageIcon(javaCupIconUrl).getImage(); 

        JButton testBtn = new JButton("Test System Tray Message1"); 
        final JFrame frame = new JFrame("testTrayIcon"); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        JLabel label = new JLabel( 
                "Successfully clicking the icon will launch espn.com"); 
        final JPanel panel = new JPanel(new BorderLayout()); 
        panel.add(testBtn , BorderLayout.NORTH); 
        panel.add(label , BorderLayout.CENTER); 
        frame.setSize(new Dimension(500 , 100)); 
        frame.add(panel); 
        frame.setVisible(true); 
        PopupMenu menu = new PopupMenu(); 
        MenuItem item = new MenuItem("showOptionPane"); 
        item.addActionListener(new ActionListener() 
        { 
            public void actionPerformed(ActionEvent e) 
            { 
                JOptionPane.showMessageDialog(frame , "shown the prompt"); 
            } 
        }); 
        menu.add(item); 
        trayIcon = new TrayIcon(trayImage , "Kaither App" , menu); 

        trayIcon.addActionListener(new ActionListener() 
        { 

            @Override 
            public void actionPerformed(ActionEvent e) 
            { 
                frame.toFront(); 
                frame.setVisible(true); 
            } 
        }); 

        SwingUtilities.invokeLater(new Runnable() 
        { 
            public void run() 
            { 
                try 
                { 
                    tray.add(trayIcon); 
                } 
                catch (AWTException e) 
                { 
                    System.out.println(e.getStackTrace()); 
                } 
            } 
        }); 
    } 
} 