【问题标题】:Java TrayIcon displayMessage 'may trigger ActionEvent' when does it/doesn't it?Java TrayIcon displayMessage '可能会触发 ActionEvent' 什么时候/不是吗?
【发布时间】:2012-07-26 16:19:52
【问题描述】:

当使用 TrayIcon.displayMessage 显示弹出通知时,Java 6 文档指出“单击消息可能会触发 ActionEvent。”

http://docs.oracle.com/javase/6/docs/api/java/awt/TrayIcon.html#displayMessage%28java.lang.String,%20java.lang.String,%20java.awt.TrayIcon.MessageType%29

“五月”?谢谢,文档。

在我的 Windows 2000 测试 VM 上,单击消息似乎不会触发 ActionEvent(不幸的是,我没有任何更新的 Windows 许可证进行测试),而相同的代码在 Ubuntu 和 OS X 中会触发一个。

注意:单击图标本身会触发鼠标侦听器上的事件。

所以无论如何,我的具体问题是:

  1. 在 Windows 2000 中单击通知不会触发 ActionEvent 我是否正确,或者我做错了什么?

  2. 在 Windows XP 或 Windows 7 中触发 ActionEvent 是否有效?

最小的示例代码如下。当我在 Windows 2000 中使用java Test 运行它时,单击通知不会生成任何命令行输出。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

import javax.swing.SwingUtilities;

public class Test
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                TrayIcon icon = new TrayIcon(
                    new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB));
                icon.addActionListener(new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent arg0)
                    {
                        System.err.println("ActionEvent: " + arg0);
                    }
                });
                try
                {
                    SystemTray.getSystemTray().add(icon);
                }
                catch(AWTException e)
                {
                    e.printStackTrace();
                }
                icon.displayMessage("New message", "Can you click on this?",
                    TrayIcon.MessageType.INFO);
            }
        });
    }
}

【问题讨论】:

    标签: java notifications trayicon windows-2000


    【解决方案1】:

    您正在处理的问题是跨平台植入问题,这就是它“可能”触发事件的原因

    【讨论】:

    • 我明白这一点,但我认为了解(对我和其他人)它实际触发事件的平台会很有用。
    • 很明显,通知确实会引发某种事件,因为 C 应用程序会在我单击时做出响应,但 Java 不会。我正在使用 Windows 10 顺便说一句。
    • @Matthew 因为 Java 已将需求提炼为跨平台 API,仅仅因为它在 C 中的 Windows 上工作并不意味着它在其他平台上也能以同样的方式工作——Java API 是根据 API 本身的上下文(而不是平台)自行选择何时触发事件
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多