java - 如何选择时间/日期并将其放入计时器任务中?

标签 java date timer

由于我更正了对某些功能而不是其他功能的使用,因此我发布了此内容。我尝试使用 JSpinner 选择日期和时间,然后将其放入计时器中,触发器必须是我选择的日期和时间。

我如何使用它通过移动箭头来更改时间并将日期和时间放入计时器中?

    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerDateModel;
    import javax.swing.SpinnerModel;
    import java.util.Calendar;
    import java.util.Date;
    import javax.swing.Timer;

    public class SpinnerDateSample {
     public static void main(String args[]) {
     JFrame frame = new JFrame("JSpinner Sample");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


     SpinnerModel model1 = new SpinnerDateModel();
     JSpinner spinner1 = new JSpinner(model1);
     spinner1.addChangeListener(new CalendarListener());

     JLabel label1 = new JLabel("Dates/Date");
     JPanel panel1 = new JPanel(new BorderLayout());
     panel1.add(label1, BorderLayout.WEST);
     panel1.add(spinner1, BorderLayout.CENTER);
     frame.add(panel1, BorderLayout.CENTER);

     frame.setSize(200, 90);
     frame.setVisible(true);
    }
   }

   private class CalendarListener implements ChangeListener {
    public void stateChanged(ChangeEvent e)  {
     JSpinner jSpinner = (JSpinner) e.getSource();
     Date date = (Date) jSpinner.getValue();
     long delay = date.getTime() - System.currentTimeMillis();
      timerStart();
      if (delay > 0) {
      timer.setInitialDelay((int) delay);
      timer.restart();
     }
    }   
   }

   TimerStart() {
    this.timer = new Timer(Integer.MAX_VALUE, (ActionEvent evt) -> {
     System.out.println("okey");
   });}

最佳答案

TimerTask 是一个遗留类,您可以使用 ScheduledExecutorService 按计划的时间间隔执行任务,这是最佳实践,如下所示:

Selection6Runable 类:

public class Selection6Runable implements Runnable {
         public void run() {
              //Add code for Selection6 Logic, 
             // this code will be run everytime when the scheduler runs
          }
     }

使用上面的代码:

ScheduledExecutorService scheduledService= Executors.newScheduledThreadPool(1);
//Change the below time interval according 
//to the data received i.e., CalDcB.getSelectedItem()
scheduledService.scheduleAtFixedRate(()-> new Selection6Runable(), 
                        0, 1000L, TimeUnit.MILLISECONDS);

你可以看看here了解更多详情

关于java - 如何选择时间/日期并将其放入计时器任务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449871/

相关文章:

java - 数组长度

Ruby 日期方法问题

mySQL 更新接下来的 12 个 NULL 值,日期递增 1

ios - swift 中的日期格式问题

php - 如何从javascript调用表单提交?

java - 实例不工作?

java - 从 Java Applet 获取主机 url

javascript - 我想在特定时间后加载另一个 HTML 页面

ios - 如果在一定时间内未交互,则隐藏按钮

java - 即使在 vm args 中使用 XstartOnFirstThread,线程访问也无效