| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:托盘程序及消息提示、闪动
只看楼主 加入收藏
暂不存在
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2013-5-30
结帖率:75%
收藏
已结贴  问题点数:36 回复次数:4 
托盘程序及消息提示、闪动
麻烦大神帮我看下程序那里有问题,为什么打不开窗口和托盘的菜单面盘,已经看了很久了,程序运行需要Substance.jar

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.Toolkit;
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   
import   
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("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icons\\Windows\\Signal.ico"));  
        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.setVisible(true);  
        this.setSize(400, 400);  
        //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setLocationRelativeTo(null);  
        // 添加窗口最小化事件,将托盘添加到操作系统的托盘  
        /*this.addWindowListener(new WindowAdapter(){
            public void windowIconified(WindowEvent e) {
                addTrayIcon();
            }
        });*/System.out.println("ok");
        addTrayIcon();   
        
        
    }  

    /**
     * 添加托盘的方法
     */  
    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 = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Mr Lin\\Desktop\\QQ截图20140311131941.png");
        icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icon\\Windows\\iTunes.ico"));
        //icon = new ImageIcon(getRes("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icons\\Windows\\Finder.ico"));// 托盘图标  
        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();  
            }  
        });  
    }  

}
搜索更多相关主题的帖子: import 托盘 
2014-03-13 19:45
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:36 
我运行了下,你这里报一个空指针 this.setVisible(true);

学海无涯#¥%……&*(
2014-03-14 14:16
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:0 
哦,我看了下,主要是我这边没有你的资源文件,你的路径对么,

学海无涯#¥%……&*(
2014-03-14 14:19
暂不存在
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2013-5-30
收藏
得分:0 
应该没错吧,你可以改下路径,图片随便找一张都可以的
2014-03-14 17:07
暂不存在
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2013-5-30
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-03-14 17:08
快速回复:托盘程序及消息提示、闪动
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039010 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved