Java-TrayIcon消息未在Windows XP、Vista上显示
我正在编写一个利用Java的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());
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):不工作
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