Java - TrayIcon消息未在Windows XP,Vista上显示

时间:2013-07-21 21:00:01

标签: java swing popup message trayicon

我正在编写一个使用Java TrayIcon类的应用程序,但我似乎无法在Windows XP / Vista上显示消息。这是一个已知的问题还是我缺少的东西? (消息在Windows 7上显示)

代码:

public class SysTray {
    public static void main(String[] args) throws Exception {
        TrayIcon icon = new TrayIcon(getImage());

        icon.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Good");
            }
        });
        SystemTray.getSystemTray().add(icon);

        icon.displayMessage("Attention", "Please click here", 
            TrayIcon.MessageType.WARNING);
    }

    private static Image getImage() throws HeadlessException {
        Icon defaultIcon = MetalIconFactory.getTreeHardDriveIcon();
        Image img = new BufferedImage(defaultIcon.getIconWidth(), 
            defaultIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR);
        defaultIcon.paintIcon(new Panel(), img.getGraphics(), 0, 0);

        return img;
    }
}

编辑:计算机都使用最新版本的Java

编辑II: 各种计算机上的测试结果:

  • Windows XP,J7_25(1.7.0_25-b16):正常工作
  • Windows 7,J7_25(1.7.0_25-b17):正常工作
  • Windows XP,J7_25(1.7.0_25-b17):不起作用

1 个答案:

答案 0 :(得分:1)

看看发生了什么(Java6_022和Java7_21,在两个JDK上测试过)

WinXP - - > enter image description here

Win8 - - > enter image description here

来自代码

import java.awt.AWTException;
import java.awt.EventQueue;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.plaf.metal.MetalIconFactory;

public class SysTray {

    public SysTray() {
        TrayIcon icon = new TrayIcon(getImage());
        icon.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Good");
            }
        });
        try {
            SystemTray.getSystemTray().add(icon);
        } catch (AWTException ex) {
        }
        icon.displayMessage("Attn","Click here",TrayIcon.MessageType.WARNING);
    }

    private Image getImage() throws HeadlessException {
        Icon defaultIcon = MetalIconFactory.getTreeHardDriveIcon();
        Image img = new BufferedImage(defaultIcon.getIconWidth(),
                defaultIcon.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR);
        defaultIcon.paintIcon(new JPanel(), img.getGraphics(), 0, 0);
        return img;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                SysTray sysTray = new SysTray();
            }
        });
    }
}