主体实现主要是用js控制,我们用的dwr技术,将消息体的获取,时间控制及当前时间要显示的消息个数,都写到dwr配置的类中。
接着在消息js中通过dwr生成的js名称调用上述的方法获取消息信息,将数据封装到js中,在需要使用消息的页面只需要导入消息js、dwr的js就可以使用了。
实现提醒功能给你思路吧。你可以写单独写个线程监视是否有消息传回,然后刷新页面。至于怎么刷新页面其实很简单,写一个事件接口。然后UI页面实现这个接口。有消息传回的时候就刷新页面。
至于系统托盘我给你一个我无聊写的倒计时程序片段,其中有系统托盘。
/**
* 设置系统托盘图标及快捷菜单
*/
private void setIcon(){
addWindowStateListener(new WindowStateListener() {
public void windowStateChanged(WindowEvent e) {
if (getState() == 1) {
setVisible(false)
}
}
})
if (SystemTray.isSupported()) {
tray = SystemTray.getSystemTray()
}
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("china.gif"))
ActionListener defaultListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (e.getActionCommand().equals( "exit")) {
exit()
}
} catch (Exception ex) {
System.out.println("hehehe"+ex.getMessage())
}
}
}
ActionListener openListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (e.getActionCommand().equals("display")) {
setVisible(true)
}
} catch (Exception ex) {
System.out.println("haha"+ex.getMessage())
}
}
}
popup = new PopupMenu()
// 创建[显示]菜单及其事件
MenuItem openItem = new MenuItem("显示")
openItem.addActionListener(openListener)
openItem.setActionCommand("display")
popup.add(openItem)
// 创建[退出]菜单及其事件
MenuItem defaultItem = new MenuItem("退出")
defaultItem.addActionListener(defaultListener)
defaultItem.setActionCommand("exit")
popup.add(defaultItem)
// 右键图标
trayIcon = new TrayIcon(image, "Java倒计时", popup)
trayIcon.setImageAutoSize(true)
trayIcon.addActionListener(defaultListener)
trayIcon.addMouseListener(new MouseAdapter() {
@SuppressWarnings("static-access")
public void mouseClicked(MouseEvent e) {
// 点击系统托盘图标和鼠标左键
if (e.getSource() == trayIcon &&e.getButton() == e.BUTTON1) {
if (e.getClickCount() == 2)// 双击
{
setVisible(true)
}
}
}
})
try {
tray.add(trayIcon)
} catch (AWTException e1) {
//e1.printStackTrace()
System.out.println("heihei"+e1.getMessage())
}
}
先写这么一个一个类。用来做你要做的事情import java.util.TimerTask
/**
* @author songml
*
*/
public class ReportGenerator extends TimerTask {
public void run() {
System.out.println("doing something start")
}
}
再写一个定义时间的类。用来设定时间,一旦到了设定时间,调用上一个类
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Timer
class MainApplication {
public static void main(String[] args) {
Timer timer = new Timer()
Calendar calendar = Calendar.getInstance()
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
//设定当月的14号的上午10点23分11秒启动
calendar.set(Calendar.DATE, 14)
calendar.set(Calendar.HOUR, 10)
calendar.set(Calendar.MINUTE, 23)
calendar.set(Calendar.SECOND, 11)
//格式化时间
System.out.println("程序开始的时间是:"+df.format(calendar.getTime()))
timer.schedule(new ReportGenerator(), // TimerTask
calendar.getTime(), // Timer
1000*60*60*24)// delay
}
}
//注意如果要设定月份的话,要减一
//比如设定11月的话,用下面的代码
//calendar.set(Calendar.MONTH, 11-1)