要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可:

1、线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯

2、获得一个SystemTray,注意我们是通过getSystemTray方法来获取,而不是直接创建一个系统托盘。

3、为我们的托盘创建图标,那么我们不难想到要使用到Image和TrayIcon两个知识点了。先创建一个Image对象实例,然后作为参数添加到TrayIcon的构造方法上,这会用到trayIcon=new TrayIcon(image,“ToolTip String”,popup);方法,其中的popup 是作为弹出菜单,也就是邮件菜单出现的。

4,通过tray来把我们的trayIcon的实例里添加到系统托盘上。这样就大功告成了,是不会感觉很简单啊 。

下面请看代码吧:

public static void main(String []args){
        new TimerAndProgressBar();
        if(SystemTray.isSupported()){
            SystemTray tray=SystemTray.getSystemTray();
            Image image=Toolkit.getDefaultToolkit().getImage("E://Important/图片/1171179");
            PopupMenu popup=new PopupMenu();
            MenuItem item=new MenuItem("弹出菜单");
            popup.add(item);
            TrayIcon icon=new TrayIcon(image,"系统托盘信息",popup);
            try{
                tray.add(icon);
            }catch(Exception e){
                e.printStackTrace();
            }
        }else{
            System.out.println("您无法使用系统托盘,抱歉!");
        }
    }

还在等什么,快点为你的软件在系统托盘上开辟一个家吧。


下面是别人家的代码,我觉得挺好的一个Demo,一起分享一下吧


package casual;

import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class TestTray {
    TrayIcon trayIcon; // 托盘图标
    SystemTray tray; // 本操作系统托盘的实例

    public TestTray() {
        final JFrame frame = new JFrame("系统托盘");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        tray = SystemTray.getSystemTray(); // 获得本操作系统托盘的实例
        ImageIcon icon = new ImageIcon("imooc.jpg"); // 将要显示到托盘中的图标

        PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
        final MenuItem show = new MenuItem("打开程序");
        final MenuItem exit = new MenuItem("退出程序");
        pop.add(show);
        pop.add(exit);
        trayIcon = new TrayIcon(icon.getImage(), "系统托盘", pop);// 实例化托盘图标

        // 为托盘图标监听点击事件
        trayIcon.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2)// 鼠标双击图标
                {
                    // tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
                    frame.setExtendedState(JFrame.NORMAL);// 设置状态为正常
                    frame.setVisible(true);// 显示主窗体
                }
            }
        });

        // 选项注册事件
        ActionListener al2 = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 退出程序
                if (e.getSource() == exit) {
                    System.exit(0);// 退出程序
                }
                // 打开程序
                if (e.getSource() == show) {
                    frame.setExtendedState(JFrame.NORMAL);// 设置状态为正常
                    frame.setVisible(true);
                }
            }
        };
        exit.addActionListener(al2);
        show.addActionListener(al2);

        try {
            tray.add(trayIcon); // 将托盘图标添加到系统的托盘实例中
        } catch (AWTException ex) {
            ex.printStackTrace();
        }

        // 为主窗体注册窗体事件
        frame.addWindowListener(new WindowAdapter() {
            // 窗体最小化事件
            public void windowIconified(WindowEvent e) {
                frame.setVisible(false);// 使窗口不可视
                frame.dispose();// 释放当前窗体资源
            }
        });
    }

    public static void main(String[] args) {
        new TestTray();
    }
}

Java应用程序使用系统托盘资源的更多相关文章

  1. WinForm 程序在系统托盘显示

    前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...

  2. java web 程序---投票系统

    1.这里会连接数据库--JDBC的学习实例 一共有3个页面. 2.第一个页面是一个form表单,第二个页面是处理数据,第三个页面是显示页面 vote.jsp <body bgcolor=&quo ...

  3. Python Flask构建微信小程序订餐系统 学习 资源

    一.Flask MVC框架结构  1.1实际项目结构   1.2application.py  项目配置文件Flask之flask-script模块使用  static.py 文件(部署到生成环境不需 ...

  4. WP7系统托盘和应用程序栏

    (一)系统托盘和应用程序栏系统托盘(1)显示系统级别的状态信息(2)Apps能隐藏和显示系统托盘Micosoft.Phone.Shell.SystemTray.IsVisible=true;应用程序栏 ...

  5. Java应用程序项目的打包与发行

    Java应用程序项目的打包与发行    这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE 程序包了是使用这种方案制作的.在 ...

  6. java程序加到系统托盘的方法

    package swingtest; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; impor ...

  7. Java程序员开发参考资源

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  8. MFC程序最小化到系统托盘及其响应函数

    预备知识: Windows API函数: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ...

  9. C#编写WIN32系统托盘程序

    基本功能概述: 程序运行后驻留系统托盘,左键呼出,右键退出.后续可加右键菜单. 注册系统案件WIN+F10,呼出程序. 重写系统消息,最小化和关闭按钮隐藏程序 using System; using ...

随机推荐

  1. sa账号无法登陆sqlserver2008

    今天遇到sa无法登陆sqlserver2008的问题,原来是sa账户未启用,混合验证模式没打开,太低端了. 具体解决过程将从百度文库里查到的文章张贴如下: 出现问题 : 标题: 连接到服务器 ---- ...

  2. 原生Js写轮播图代码

    html css js 在知道jQuery如何实现轮播效果的基础上,用js写代码 如图:标记这里的地方 理解一下 用到的知识: 1.HTML DOM 的appendChild() 和 removeCh ...

  3. Appium--swipe滑动方法

    最近公司要求对APP模块自动化,以Android 自动化为例,把appium滑动的方法swipe()再小结下.滑动的目的,一方面是为了更好的查找元素,一方面就是为了滑屏操作.代码如下: package ...

  4. webpack4新建一个项目

    Create a new directory mkdir webpack-4-quickstart Initialize a package.json by running: npm init -y ...

  5. Arrays的二分查找

    二分查找也称为折半查找,是对有序元素查找的一种算法,在查找的过程中,不断的将搜索长度减半,因此效率不错.Java的JDK提供了二分法查找的算法,使用的方法是Arrays.binarySearch(). ...

  6. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  7. Conference-Web Search and Data Mining

    Conference WSDM(Web Search and Data Mining)The ACM WSDM Conference Series 不像KDD.WWW或者SIGIR,WSDM因为从最开 ...

  8. Java对象的内存布局以及对象所需内存大小计算详解

    1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...

  9. gradle 入门介绍

    gradle 简介 基于Groovy实现的自动化构建工具,比maven好的一点在于不用写复杂的xml文件.使用script就可以. gradle 专业名词 从一个build.gradle 文件开始,b ...

  10. Android程序员必须掌握的知识点-多进程和多线程

    当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程.默认情况下,同一应用的所有组件在相同的进程和线程(称为"主" ...