这个程序使用ArrayList来存储提醒可以添加、删除、修改提醒并且可以查看当前的提醒列表。在开始提醒时使用Timer来定时执行ReminderTaskReminderTask会弹出窗口提醒用户并使用JavaMail发送邮件提醒。用户需要在程序中输入自己的邮箱账号、密码和收件人邮箱地址才能使用邮件提醒功能。
代码如下:
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/hh1H 著作权归作者所有。请勿转载和采集!