[英]Java TrayIcon.displayMessage() does not work on Windows XP
[英]Java - TrayIcon messages not displaying on Windows XP, Vista
我正在编写一个利用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:在各种计算机上的测试结果:
查看发生了什么(在两个JDK上都经过测试的Java6_022和Java7_21)
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();
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.