import java.awt.AWTException; import java.awt.Image; 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.io.File; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.TimerTask; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import javax.swing.JSpinner; import javax.swing.SpinnerDateModel; public class Alarm { private TrayIcon icon; private Image clockImage; private Image alarmImage; private Date alarmTime; public Alarm() throws IOException, AWTException { SystemTray tray = SystemTray.getSystemTray(); clockImage = ImageIO.read(new File("clock.png")); alarmImage = ImageIO.read(new File("alarm.png")); PopupMenu menu = new PopupMenu(); MenuItem item = new MenuItem("時刻設定"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { configurateTime(); } }); menu.add(item); item = new MenuItem("終了"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); menu.add(item); icon = new TrayIcon(clockImage, "アラーム", menu); tray.add(icon); } private void configurateTime() { if (alarmTime == null) { alarmTime = new Date(); } JSpinner spinner = new JSpinner(new SpinnerDateModel(alarmTime, null, null, Calendar.SECOND)); int value = JOptionPane.showConfirmDialog(null, spinner, "時刻設定", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (value == JOptionPane.OK_OPTION) { alarmTime = (Date)spinner.getValue(); TimerTask task = new TimerTask() { public void run() { icon.displayMessage("Alarm", "時間だよ!", TrayIcon.MessageType.INFO); icon.setImage(alarmImage); try { Thread.sleep(20000L); } catch (InterruptedException ex) {} icon.setImage(clockImage); } }; java.util.Timer timer = new java.util.Timer(); timer.schedule(task, alarmTime); } } public static void main(String[] args) { try { new Alarm(); } catch (IOException ex) { ex.printStackTrace(); } catch (AWTException ex) { ex.printStackTrace(); } } }