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

Java-TrayIcon消息未在Windows XP、Vista上显示,java,swing,popup,message,trayicon,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());

我正在编写一个利用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

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

  • Windows XP,J7_25(1.7.0_25-b16):有效
  • Windows7,J7_25(1.7.0_25-b17):工作正常
  • Windows XP,J7_25(1.7.0_25-b17):不工作
查看发生了什么(Java6\u 022和Java7\u 21,在两个JDK上都进行了测试)

WinXP->

Win8->

源代码

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

不,>JDK_6上的WinXP/7/8(从未接触过Vista)上的displayMessage()没有任何问题。18@mKorbel这不是(不应该)一个问题-两台计算机的版本都大于6.18。对不起,你的评论比你的问题更清楚,顺便说一句,我只是好奇,没有别的(否则,我会被要求在WinXP上提供一个简短的、可运行的、可编译的并导致上午缺少的代码)StringConstants来自于从JNI/A调用的C++/.Net,或者是一些手工操作_Made@mKorbel
StringConstants
只是一个手工制作的类,带有..嗯.常量字符串显示最简单的可运行代码,它应该做您期望的事情。对不起,我没有-
Windows XP,J7_25(1.7.0_25-b17):不工作
,我安装了最新的1.7.0_25-b17 win32b,没有问题,在JDK1.6_022和JDK1.7中编译。_011