该 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();
        }
    }
}

说明:

  1. Reminder 类包含一个 ArrayList 来存储提醒。
  2. addReminder() 方法让用户输入提醒消息和日期时间,创建 ReminderItem 对象并添加到 reminders 中。
  3. deleteReminder() 方法让用户输入要删除的提醒的索引,从 reminders 中删除该提醒。
  4. editReminder() 方法让用户输入要修改的提醒的索引,然后让用户输入新的提醒消息和日期时间,更新该提醒的信息。
  5. listReminders() 方法列出所有的提醒。
  6. startReminder() 方法让用户输入自己的邮箱账号、密码和收件人邮箱地址,然后使用 Timer 来定时执行 ReminderTask 来弹出提醒窗口和发送邮件提醒。
  7. main() 方法包含一个循环,让用户选择要执行的操作。
  8. ReminderItem 类表示一个提醒,包含提醒消息和日期时间。
  9. parseDate() 方法将字符串形式的日期时间转换为 Date 对象。
  10. toString() 方法返回该提醒的字符串表示。
  11. ReminderTask 类是一个定时任务,继承自 TimerTask,包含提醒消息、发件人邮箱账号、密码和收件人邮箱地址等信息。run() 方法弹出提醒窗口并使用 JavaMail 发送邮件提醒。
Java 提醒程序:使用 ArrayList 和 Timer 定时提醒,支持邮件通知

原文地址: https://www.cveoy.top/t/topic/oKSV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录