首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Java从SystemTray中删除TrayIcon

如何使用Java从SystemTray中删除TrayIcon
EN

Stack Overflow用户
提问于 2014-02-07 17:27:46
回答 3查看 4.1K关注 0票数 2

您好,我可以将TrayIcon添加到SystemTray中,并可以删除相同的表单SystemTray。

如何删除现有的TrayIcon。我无法将对象获取到available TrayIcons来执行此操作。

下面是我添加和删除TrayIcon的代码

代码语言:javascript
复制
        TrayIcon trayIcon = new TrayIcon(icon);
        SystemTray tray = SystemTray.getSystemTray();
        PopupMenu popup = new PopupMenu();
        MenuItem exit = new MenuItem("Exit");         
        popup.add(exit);

        trayIcon.setToolTip("My TrayIcon");
        trayIcon.setPopupMenu(popup); 
        tray.add(trayIcon);

        trayIcon.displayMessage("Testing",
                "Information" ,
                TrayIcon.MessageType.INFO );
        tray.remove(trayIcon);
EN

回答 3

Stack Overflow用户

发布于 2018-05-04 16:39:47

代码语言:javascript
复制
SystemTray tray = SystemTray.getSystemTray();
        try {
            boolean exist = false;
            for(TrayIcon icon : tray.getTrayIcons() ){
                if(icon.getImage().equals(trayIcon.getImage()) && icon.getToolTip().equals(trayIcon.getToolTip())){
                    exist = true;
                    break;
                }
            }
            if(exist){
                tray.remove(trayIcon);
                                }
票数 2
EN

Stack Overflow用户

发布于 2014-02-07 17:30:37

您必须将其从SystemTray中删除。

系统托盘包含一个或多个使用add(java.awt.TrayIcon)方法添加到托盘的托盘图标。当不再需要它们时,可以使用remove(java.awt.TrayIcon)方法将其删除。

在"How to Use the System Tray",tutorial“中,您将找到答案

票数 1
EN

Stack Overflow用户

发布于 2021-06-15 16:06:29

这是移除图标的正确方法,就像你对做的那样

代码语言:javascript
复制
SystemTray tray = SystemTray.getSystemTray();
tray.remove(trayIcon);

但是,如果您从Eclipse运行应用程序,而不是处理程序窗口,您只需像“硬停止”一样停止运行,因此图标将保留在try图标中,直到您将鼠标悬停以使其消失。

原因是- Windows不会监控你的程序是否仍在运行,你应该在停止应用程序之前小心关闭你的资源。

在关闭程序时,尝试以某种方式运行方法closeProgram()

代码语言:javascript
复制
public void closeProgram()
{
    tray.remove(trayIcon);
    System.exit(0);
}

在我的例子中,我有一些JFrame窗口,所以我添加了窗口侦听器来执行此操作

代码语言:javascript
复制
addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent e)
    {
        closeProgram();
    }
});

如果您使用批处理文件运行程序,我认为您将无法控制它,也许更好的做法是隐藏批处理控制台,并显示显示日志打印的简单JFrame,但好处是它将有"X“按钮来关闭程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21623872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档