Java 提醒程序:使用 ArrayList 和 Timer 定时提醒,支持邮件通知
该 Java 程序使用 ArrayList 来存储提醒,并使用 Timer 定时执行提醒任务。程序支持添加、删除、修改提醒,并可以查看当前的提醒列表。此外,程序还提供邮件提醒功能,用户需要在程序中输入自己的邮箱账号、密码和收件人邮箱地址。
代码如下:
Reminder.java
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class Reminder {
private ArrayList<ReminderItem> reminders;
public Reminder() {
reminders = new ArrayList<ReminderItem>();
}
public void addReminder() {
Scanner input = new Scanner(System.in);
System.out.print('Enter reminder message: ');
String message = input.nextLine();
System.out.print('Enter reminder date and time (yyyy-mm-dd HH:mm:ss): ');
String dateStr = input.nextLine();
Date date = ReminderItem.parseDate(dateStr);
ReminderItem newReminder = new ReminderItem(message, date);
reminders.add(newReminder);
System.out.println('Reminder added: ' + newReminder);
}
public void deleteReminder() {
Scanner input = new Scanner(System.in);
System.out.print('Enter reminder index: ');
int index = input.nextInt();
if (index >= 0 && index < reminders.size()) {
ReminderItem deletedReminder = reminders.remove(index);
System.out.println('Reminder deleted: ' + deletedReminder);
} else {
System.out.println('Invalid reminder index.');
}
}
public void editReminder() {
Scanner input = new Scanner(System.in);
System.out.print('Enter reminder index: ');
int index = input.nextInt();
if (index >= 0 && index < reminders.size()) {
ReminderItem reminder = reminders.get(index);
System.out.print('Enter new reminder message: ');
String message = input.nextLine();
if (message.equals('')) {
message = input.nextLine();
}
reminder.setMessage(message);
System.out.print('Enter new reminder date and time (yyyy-mm-dd HH:mm:ss): ');
String dateStr = input.nextLine();
if (!dateStr.equals('')) {
Date date = ReminderItem.parseDate(dateStr);
reminder.setDate(date);
}
System.out.println('Reminder updated: ' + reminder);
} else {
System.out.println('Invalid reminder index.');
}
}
public void listReminders() {
if (reminders.isEmpty()) {
System.out.println('No reminders.');
} else {
for (int i = 0; i < reminders.size(); i++) {
System.out.println(i + '. ' + reminders.get(i));
}
}
}
public void startReminder() {
if (reminders.isEmpty()) {
System.out.println('No reminders.');
return;
}
Scanner input = new Scanner(System.in);
System.out.print('Enter your email address: ');
String from = input.nextLine();
System.out.print('Enter your email password: ');
String password = input.nextLine();
System.out.print('Enter recipient email address: ');
String to = input.nextLine();
Timer timer = new Timer();
for (ReminderItem reminder : reminders) {
if (reminder.getDate().after(new Date())) {
timer.schedule(new ReminderTask(reminder.getMessage(), from, password, to), reminder.getDate());
}
}
}
public static void main(String[] args) {
Reminder reminder = new Reminder();
Scanner input = new Scanner(System.in);
while (true) {
System.out.println('1. Add reminder');
System.out.println('2. Delete reminder');
System.out.println('3. Edit reminder');
System.out.println('4. List reminders');
System.out.println('5. Start reminder');
System.out.println('6. Exit');
System.out.print('Enter your choice: ');
int choice = input.nextInt();
switch (choice) {
case 1:
reminder.addReminder();
break;
case 2:
reminder.deleteReminder();
break;
case 3:
reminder.editReminder();
break;
case 4:
reminder.listReminders();
break;
case 5:
reminder.startReminder();
break;
case 6:
System.exit(0);
default:
System.out.println('Invalid choice.');
}
}
}
}
ReminderItem.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ReminderItem {
private String message;
private Date date;
public ReminderItem(String message, Date date) {
this.message = message;
this.date = date;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public static Date parseDate(String dateStr) {
SimpleDateFormat dateFormat = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
try {
return dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
@Override
public String toString() {
SimpleDateFormat dateFormat = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
return '[' + dateFormat.format(date) + '] ' + message;
}
}
ReminderTask.java
import java.awt.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class ReminderTask extends TimerTask {
private String message;
private String from;
private String password;
private String to;
public ReminderTask(String message, String from, String password, String to) {
this.message = message;
this.from = from;
this.password = password;
this.to = to;
}
public void run() {
// show reminder window
EventQueue.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, message, 'Reminder', JOptionPane.INFORMATION_MESSAGE);
}
});
// send email reminder
String host = 'smtp.gmail.com';
int port = 587;
Properties properties = new Properties();
properties.put('mail.smtp.host', host);
properties.put('mail.smtp.port', port);
properties.put('mail.smtp.auth', 'true');
properties.put('mail.smtp.starttls.enable', 'true');
Session session = Session.getInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
Message emailMessage = new MimeMessage(session);
emailMessage.setFrom(new InternetAddress(from));
emailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
emailMessage.setSubject('Reminder');
emailMessage.setText(message);
Transport.send(emailMessage);
System.out.println('Email reminder sent to ' + to);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
说明:
- Reminder 类包含一个 ArrayList
来存储提醒。 - addReminder() 方法让用户输入提醒消息和日期时间,创建 ReminderItem 对象并添加到 reminders 中。
- deleteReminder() 方法让用户输入要删除的提醒的索引,从 reminders 中删除该提醒。
- editReminder() 方法让用户输入要修改的提醒的索引,然后让用户输入新的提醒消息和日期时间,更新该提醒的信息。
- listReminders() 方法列出所有的提醒。
- startReminder() 方法让用户输入自己的邮箱账号、密码和收件人邮箱地址,然后使用 Timer 来定时执行 ReminderTask 来弹出提醒窗口和发送邮件提醒。
- main() 方法包含一个循环,让用户选择要执行的操作。
- ReminderItem 类表示一个提醒,包含提醒消息和日期时间。
- parseDate() 方法将字符串形式的日期时间转换为 Date 对象。
- toString() 方法返回该提醒的字符串表示。
- ReminderTask 类是一个定时任务,继承自 TimerTask,包含提醒消息、发件人邮箱账号、密码和收件人邮箱地址等信息。run() 方法弹出提醒窗口并使用 JavaMail 发送邮件提醒。
原文地址: https://www.cveoy.top/t/topic/oKSV 著作权归作者所有。请勿转载和采集!