桌面程序当中,托盘显示是一个常用的功能。

C#的WinForm程序要实现托盘是挺轻松的,而Java Swing要实现这个功能虽然也不难,

但是由于Java Swing开发者或许没有C#多,所以看到很多新手求助这个实例。

我写了一个很简单的Demo,希望能帮到所需要的人。

因为很简单,不赘述讲解,直接上代码。

(工程目录截图,以及Demo用到的png托盘图标都放在文末了)

(另有不清楚的可以联系QQ:119945778)

package ui;

import java.awt.AWTException;
import java.awt.EventQueue;
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 javax.swing.ImageIcon;
import javax.swing.JFrame; public class TuoPanDemo extends JFrame
{
private static final long serialVersionUID = 1L; // 当前操作系统的托盘对象
private SystemTray sysTray; // 托盘图标
private TrayIcon trayIcon; // 图片
private ImageIcon icon = null; // 消息是否需要闪烁。默认false不需要闪烁。这个状态需要跨线程修改的。
// 所以为了健壮代码、线程安全,注意使用关键字volatile
private volatile boolean msgNeedFlash = false; public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
TuoPanDemo frame = new TuoPanDemo();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
} public TuoPanDemo()
{
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 这句可以注释掉的,用托盘右键退出程序即可。
getContentPane().setLayout(null);
setLocationRelativeTo(null); createTrayIcon(); // 这里可以开启检测是否有消息的线程,如果有,就闪烁图标
new Thread(runnableFlash).start();
} private void createTrayIcon()
{
// 实例化当前操作系统的托盘对象
sysTray = SystemTray.getSystemTray(); // 实例化一个图标
icon = new ImageIcon(TuoPanDemo.class.getResource("/img/rabbit_24px.png")); // Java托盘程序必须有一个右键菜单
PopupMenu popupMenu = new PopupMenu();
MenuItem menuOpen = new MenuItem("Open Msg");
MenuItem menuExit = new MenuItem("Exit");
popupMenu.add(menuOpen);
popupMenu.add(menuExit); // 为右键弹出菜单项添加事件
menuOpen.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
Msg msg = new Msg();
msg.setVisible(true); // 显示窗口
msg.toFront(); // 显示窗口到最前端
}
}); msgNeedFlash = false; // 消息打开了,就不要闪烁了
}
});
menuExit.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}); // 实例化托盘图标
trayIcon = new TrayIcon(icon.getImage(), "消息盒子", popupMenu); // 图标大小自适应
trayIcon.setImageAutoSize(true); // 将托盘图标添入托盘
try
{
sysTray.add(trayIcon);
}
catch (AWTException e1)
{
e1.printStackTrace();
} } private Runnable runnableFlash = new Runnable()
{
@Override
public void run()
{
while (true)
{
if (msgNeedFlash == true)// 如果新消息需要闪烁
{
try
{
// 闪动消息的空白时间
trayIcon.setImage(new ImageIcon("").getImage());
Thread.sleep(500);
// 闪动消息的提示图片
trayIcon.setImage(icon.getImage());
Thread.sleep(500);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else //如果不需要闪烁,就重置托盘图标
{
trayIcon.setImage(icon.getImage());
try
{
Thread.sleep(1000 * 10);//10秒闪烁一次。可以在这里读数据库是否有新的审批
msgNeedFlash = true;
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
};
}
package ui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel; public class Msg extends JFrame
{
private static final long serialVersionUID = 1L; public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
Msg frame = new Msg();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
} public Msg()
{
setBounds(100, 100, 260, 120);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null); JLabel label = new JLabel("您有新的消息");
label.setBounds(77, 30, 100, 15);
getContentPane().add(label); }
}

 

Java Swing 托盘闪烁Demo实例的更多相关文章

  1. Java Swing窗体小工具实例 - 原创

    Java Swing窗体小工具实例 1.本地webserice发布,代码如下: 1.1 JdkWebService.java package server; import java.net.InetA ...

  2. 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode

    使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...

  3. Java swing JFrame用repaint出现闪烁的问题解决

    这几天用swing写登录页面背景动图的时候发现一直会有闪烁(我的类是继承JFrame),就来搜原因后发现好像是因为repaint会调用update()方法中的清屏操作导致闪烁. 我当时看的是这个文章 ...

  4. atitit.系统托盘图标的设计java swing c# .net c++ js

    atitit.系统托盘图标的实现java swing c# .net c++ js 1. 系统托盘图标的结构 1 2. Java swing的实现 1 3. .net的实现 1 4. C++的实现 1 ...

  5. Java Swing 使用总结(转载)

    随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在 ...

  6. 客户端是选择Java Swing还是C# Winform

      登录|注册     mentat的专栏       目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题     [知识库]Swift资源大集合    [公告]博客新皮肤上线啦 ...

  7. java swing中Timer类的学习

    最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...

  8. 恶补Java Swing线程刷新UI机制(由浅到深的参考大佬博文)

    1. java中进度条不能更新问题的研究 感谢大佬:https://blog.csdn.net/smartcat86/article/details/2226681 为什么进度条在事件处理过程中不更新 ...

  9. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

随机推荐

  1. Linux就该这么学 20181008(第十三章BIND)

    参考链接https://www.linuxprobe.com Bind提供域名解析服务 DNS Domin Name Server 域名解析服务 功能模式 .正向解析,将域名解析为IP地址 .反向解析 ...

  2. 8.MATLAB数据分析

    概述: clc; clear all; p1=[ ]; y=poly2sym(p1) %由向量创建多项式 disp(y) %显示多项式 1 多项式的求值与求根 clc; clear all; p=[ ...

  3. .NET平台开源JSON序列化

    转载: http://blog.csdn.net/ddgweb/article/details/39643747 一个简单示例: String str = "{’name’:’cyf’,’i ...

  4. PHP邮件发送库:Swiftmailer

    Swiftmailer需要PHP 7.0或更高版本,(proc_*函数可用.) 安装 composer require "swiftmailer/swiftmailer:^6.0" ...

  5. Python 对象初识

    # Demo1class Penson: animal = 'big mom' plant = 'flower' def __init__(self,name,age,sex,job): self.n ...

  6. P1888 三角函数

    题目描述 输入一组勾股数a,b,c(a≠b≠c),用分数格式输出其较小锐角的正弦值.(要求约分.) 输入输出格式 输入格式: 一行,包含三个数,即勾股数a,b,c(无大小顺序). 输出格式: 一行,包 ...

  7. Core Java(四)

    四.数组 数组就是主函数(main方法)中的参数:public static void main(String[] args){    }数组是指一组数据的集合,数组中的每个数据称为元素.在Java中 ...

  8. Service(服务)简单使用

    1.Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件.服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activ ...

  9. Hibernate框架学习(八)——查询-HQL语法

    一.单表查询 1.基础语法 2.排序 3.条件 4.分页 5.聚合 6.投影 二.多表查询 1.回顾原生SQL 1>交叉连接-笛卡尔积(避免)select * from A,B; 2>内连 ...

  10. day01 编程概述及计算机组成原理

    目录 编程概述 计算机硬件的五大组成部分 Central Processing Unit(cpu中央处理器) 存储器 输入,输出设备 打开QQ的流程 计算机五大组成部分补充 多核CPU ×64/x86 ...