如何将侦听器添加到 osx 上的 java 停靠图标

Posted

技术标签:

【中文标题】如何将侦听器添加到 osx 上的 java 停靠图标【英文标题】:how to add listener to java dock icon on osx 【发布时间】:2013-05-06 14:42:39 【问题描述】:

我的应用程序中有 jframe 关闭时隐藏,但是当我单击停靠图标时,我想要它 设置可见(真); 如何将动作侦听器添加到停靠图标? 我试过了

Image im = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("SLogo.png"));
final TrayIcon tri = new TrayIcon(im);
tri.addActionListener(this);

@Override
public void actionPerformed(ActionEvent ae) 
     this.setVisible(true);
     System.out.print("ok");


但它没有被触发, 还有,它将如何影响windows机器上的应用程序?

【问题讨论】:

【参考方案1】:

您需要使用AppForegroundListener 和/或AppReOpenedListener。看这个例子:

public static void main(String[] args)

    final JFrame frame = new JFrame();

    Application app = Application.getApplication();
    app.addAppEventListener(new AppForegroundListener() 

        @Override
        public void appMovedToBackground(AppForegroundEvent arg0)
        
            System.out.println("appMovedToBackground");
        

        @Override
        public void appRaisedToForeground(AppForegroundEvent arg0)
        
            System.out.println("appRaisedToForeground");
            frame.setVisible(true);
        

    );

    app.addAppEventListener(new AppReOpenedListener() 
        @Override
        public void appReOpened(AppReOpenedEvent arg0)
        
            System.out.println("app reoponed");
            frame.setVisible(true);
        
    );

    frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);

如果您在 Windows 上进行开发,则需要包含 Mac/Java 类的存根,否则会出现编译器错误。见here。

如果你在 Mac 上开发,只要确保代码在 Windows 上运行时没有被执行。

【讨论】:

它只有在我关注另一个应用程序时才有效,它不听停靠图标点击 @DimaGoltsman 查看修订后的答案。你会想要一个AppReOpenedListener

以上是关于如何将侦听器添加到 osx 上的 java 停靠图标的主要内容,如果未能解决你的问题,请参考以下文章

如何将 jnlp 与 OSX 停靠图标捆绑在一起;这在 java 首选项中似乎不再可能

捆绑一个 jnlp,以便您可以添加到 mac 上的停靠点?

在 OS X 的停靠栏上下文菜单中显示图标?

Cocoa osx:为所有正在运行的应用程序在停靠元素上添加一个菜单项

如何将midi从java程序发送到OSX上的IAC总线

在最小化到停靠后恢复 Qt 应用程序,使用 OS X 上的停靠快捷方式