`
cnjarchen
  • 浏览: 43584 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java实现托盘闪动消息提醒,同时播放声音提醒。

阅读更多
引用http://www.iteye.com/topic/841846

package com.msg;

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TextArea;
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 java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;


/**
*
* 创建闪动的托盘图像
* @author Everest
*
*/
public class BickerTray extends JFrame implements Runnable {

private static final long serialVersionUID = -3115128552716619277L;

private SystemTray sysTray;// 当前操作系统的托盘对象
private TrayIcon trayIcon;// 当前对象的托盘

private ImageIcon icon = null;
private TextArea ta = null;

private static int count = 1; //记录消息闪动的次数
private boolean flag = false; //是否有新消息
private static int times = 1; //接收消息次数

public BickerTray() {
this.createTrayIcon();// 创建托盘对象
Image image = this.getToolkit().getImage(getRes("com/img/f32.gif"));
this.setIconImage(image);
init();
}

public URL getRes(String str){
    return this.getClass().getClassLoader().getResource(str);
    }

/**
* 初始化窗体的方法
*/
public void init() {
this.setTitle("消息盒子");
ta = new TextArea("");
ta.setEditable(false);
this.add(ta);
this.setSize(400, 400);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
// 添加窗口最小化事件,将托盘添加到操作系统的托盘
/*this.addWindowListener(new WindowAdapter() {
public void windowIconified(WindowEvent e) {
addTrayIcon();
}
});*/
addTrayIcon();
this.setVisible(true);
}

/**
* 添加托盘的方法
*/
public void addTrayIcon() {
try {
sysTray.add(trayIcon);// 将托盘添加到操作系统的托盘
setVisible(false);    // 使得当前的窗口隐藏
new Thread(this).start();
} catch (AWTException e1) {
e1.printStackTrace();
}
}

/**
* 创建系统托盘的对象 步骤:
* 1,获得当前操作系统的托盘对象
* 2,创建弹出菜单popupMenu
* 3,创建托盘图标icon
* 4,创建系统的托盘对象trayIcon
*/
public void createTrayIcon() {
sysTray = SystemTray.getSystemTray();// 获得当前操作系统的托盘对象
icon = new ImageIcon(getRes("com/img/f17.gif"));// 托盘图标
PopupMenu popupMenu = new PopupMenu();// 弹出菜单
MenuItem mi = new MenuItem("打开");
MenuItem exit = new MenuItem("退出");
popupMenu.add(mi);
popupMenu.add(exit);
// 为弹出菜单项添加事件
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容
BickerTray.this.setExtendedState(JFrame.NORMAL);
BickerTray.this.setVisible(true); // 显示窗口
BickerTray.this.toFront(); //显示窗口到最前端
flag = false;  //消息打开了
count = 0; times++;
}
});
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
trayIcon = new TrayIcon(icon.getImage(), "消息盒子", popupMenu);
/** 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口 */
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) { // 鼠标双击
ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容
BickerTray.this.setExtendedState(JFrame.NORMAL);
BickerTray.this.setVisible(true); // 显示窗口
BickerTray.this.toFront();
flag = false;  //消息打开了
count = 0; times++;
}
}
});
}

/**
* 线程控制闪动
*/
public void run() {
while (true) {
if(flag){ // 有新消息
try {
if(count == 1){
// 播放消息提示音
//AudioPlayer p = new AudioPlayer(getRes("file:com/sound/Msg.wav"));
//p.play(); p.stop();
try {
AudioClip p = Applet.newAudioClip(new URL("file:sound/msg.wav"));
p.play();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
// 闪动消息的空白时间
this.trayIcon.setImage(new ImageIcon("").getImage());
Thread.sleep(500);
// 闪动消息的提示图片
this.trayIcon.setImage(icon.getImage());
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
count++;
}else{ // 无消息或是消息已经打开过
this.trayIcon.setImage(icon.getImage());
try {
Thread.sleep(20000);
flag = true;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

/**
* @param args
*/
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
try {
UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}

SwingUtilities.invokeLater(new Runnable() {
public void run() {
new BickerTray();
}
});
}

}
分享到:
评论

相关推荐

    托盘闪动消息提醒(有声音+源码)-JAVA版

    本实例着重讲解如何在JAVA应用程序中实现托盘通知功能,同时伴有声音提示,这对于桌面应用来说尤其重要,因为它们需要在用户界面不被占据的情况下,有效地吸引用户的注意力。 首先,让我们了解一下Java中的系统托盘...

    java实现托盘处理

    实现Java中的系统托盘功能,可以增强应用程序与用户的交互性,尤其是在后台运行时提供通知的能力。 首先,我们需要导入相关的Java库来使用系统托盘功能。这通常涉及到`java.awt.TrayIcon`和`java.awt.Toolkit`这两...

    Java 实现的qq程序,头像闪动,托盘图标闪动,聊天

    用户上线后自动加载用户信息,用户修改头像后其他用户也会自动加载更新,消息发送过来头像会跳动,当最小化到托盘后,托盘图标也会闪动。用户间可以传递文件,发送消息。服务端可以向每个用户发送消息 可以直接运行...

    Qt 实现系统托盘,托盘菜单,托盘消息

    Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单,托盘消息Qt 实现系统托盘,托盘菜单...

    java实现托盘、气泡程序源码

    这个"java实现托盘、气泡程序源码"是一个实用的示例,可以帮助开发者了解如何在Java应用程序中实现这样的功能。 首先,让我们详细了解一下Java中的系统托盘和气泡提示的实现原理: 1. **系统托盘(System Tray)**...

    java实现系统托盘

    在Java编程环境中,实现系统托盘功能可以让程序在主窗口关闭后仍然在操作系统任务栏的托盘区域保留图标,以便用户随时访问。本主题将详细探讨两种实现方式:JNI(Java Native Interface)和JDK 6.0及更高版本提供的...

    Java实现系统托盘

    jar文件双击可以执行,jar里有源代码,可以用解压缩工具查看。 Java实现系统托盘

    JAVA实现托盘功能

    以下将详细介绍如何使用Java和Swing实现托盘功能。 首先,要使用`TrayIcon`,需要确保操作系统的任务栏支持这一特性。在Java中,我们可以通过`SystemTray`类来检查是否支持托盘功能: ```java import java.awt....

    java 实现托盘 显示图标小应用

    首先,我们需要引入Java的`javax.swing.SystemTray`和`javax.swing.TrayIcon`类,这两个类是实现托盘功能的关键。`SystemTray`代表了操作系统的系统托盘区域,而`TrayIcon`则表示托盘中的图标及其关联的操作。 1. *...

    Java系统托盘 Java系统托盘

    Java中的系统托盘功能主要通过Java的Swing库来实现,下面我们将详细探讨如何使用Java实现系统托盘。 首先,我们需要导入相关的Java库,特别是javax.swing.*,因为系统托盘的功能主要包含在这个库中。以下是一个简单...

    ASP.NET实现托盘消息

    在ASP.NET中,实现托盘消息通常是指在客户端(用户浏览器)上模拟类似QQ这样的桌面应用,能够在屏幕右下角弹出通知或消息窗口的功能。这涉及到JavaScript或者JQuery等客户端脚本技术,因为ASP.NET本身是服务器端的...

    JAVA实现系统托盘

    ### JAVA实现系统托盘知识点详解 #### 一、概述 在现代软件开发中,系统托盘功能被广泛应用于各类应用程序中,特别是在Windows操作系统上。它为用户提供了方便的应用程序控制方式,同时也帮助开发者以更优雅的方式...

    Delphi 程式动态托盘图标

    本主题聚焦于“Delphi 程式动态托盘图标”,这涉及到如何在Delphi程序中实现一个功能,使得应用可以在系统托盘区域显示动态图标,如常见的即时通讯软件QQ的图标闪烁效果。 系统托盘图标是应用程序在任务栏右下角...

    javaQQ实现托盘的小例子

    ### JavaQQ实现托盘功能详解 在Java开发中,实现应用程序的系统托盘功能是一种常见的需求,尤其是在设计桌面应用时,如即时通讯软件、音乐播放器等,它能提升用户体验,使程序更加人性化。本文将详细解析如何在Java...

    托盘邮件提醒,类似于QQ新消息提醒

    这种提醒方式与QQ的新消息提醒类似,通过在系统托盘区域进行图标闪烁来吸引用户的注意力。下面将详细介绍托盘邮件提醒的工作原理、实现方式以及其在实际应用中的价值。 首先,托盘邮件提醒是基于操作系统提供的系统...

    QT托盘消息模拟QQ消息列表通知

    QT托盘消息模拟QQ消息列表通知是一个在QT框架下实现的应用程序功能,它允许软件在系统托盘区域显示类似于QQ消息列表的通知。这个功能对于那些希望在后台运行且不占用大量桌面空间的应用程序来说非常实用。以下是关于...

    JAVA系统托盘图标控制程序

    这个"JAVA系统托盘图标控制程序"是一个示例项目,展示了如何在Java中实现这样的功能。 首先,我们要了解`TrayIcon`类,这是Java Swing库中的一个关键组件,用于在系统托盘中创建和管理图标。在`TrayIconDemo.java`...

    托盘 冒泡_delphixe托盘消息提醒_

    在DelphiXE开发环境中,创建一个能够实现在屏幕右下角显示消息提醒的托盘应用程序是一项常见的需求。这种功能常用于后台运行的应用程序,以便在需要时向用户发送通知,而不会干扰用户的主工作区。下面我们将深入探讨...

    java系统托盘 java 系统托盘 系统托盘 java 系统托盘java java任务栏 java 任务栏 任务栏java 任务栏 java 源代码

    总结来说,Java的系统托盘功能使得开发者可以创建更加友好且易于访问的应用程序,通过`TrayIcon`类提供的API,能够轻松实现图标显示、用户交互以及弹出菜单等功能,从而提升应用的易用性和可维护性。

Global site tag (gtag.js) - Google Analytics