是否在指定日期执行Java Swing操作

是否在指定日期执行Java Swing操作,java,multithreading,swing,date,timer,Java,Multithreading,Swing,Date,Timer,我正在尝试创建一个有两个选项的程序: -倒计时后执行特定任务(分钟)。 -在所选日期执行特定任务。 但是,我不知道如何在特定日期执行操作,下面是代码,提前谢谢 protected Object doInBackground() throws Exception { Timer t = new Timer(0, new ActionListener() { public void actionPerformed(ActionEvent e) {

我正在尝试创建一个有两个选项的程序: -倒计时后执行特定任务(分钟)。 -在所选日期执行特定任务。 但是,我不知道如何在特定日期执行操作,下面是代码,提前谢谢

protected Object doInBackground() throws Exception {
           Timer t = new Timer(0,  new ActionListener() {
               public void actionPerformed(ActionEvent e) {
               }
           });

           //Checking state of CheckBoxes (one cancels the other)
               if(jCheckBox2.isSelected()) {
               try {
                   int delay =(int) jSpinner2.getValue();
                   jCheckBox1.setSelected(false);
                       Thread.sleep(delay*60000); //To delay the code from miliseconds to minutes
                   } catch (InterruptedException ex) {
                       Logger.getLogger(App_Gui.class.getName()).log(Level.SEVERE, null,
   ex);
                   }
           }
               else if (jCheckBox1.isSelected()) {
                   Date delay2 = (Date) jSpinner1.getValue();
                   jCheckBox2.setSelected(false);
                   Thread.sleep(delay2); //What should I put here instead of Thread.sleep()???????

       }

           //If all is right, start the timer
           t.start();       
        t.setRepeats(false);
           //Popup dialog
           JDialog dialog = new JDialog();     
          dialog.setLocation(700, 300);
          dialog.setSize(600, 400);  
          dialog.setVisible(true);
          //Speed of color changing
          try {

             Thread.sleep(jSlider1.getValue());
                     } catch (InterruptedException ex) {
               Logger.getLogger(App_Gui.class.getName()).log(Level.SEVERE, null,
   ex);
           } //Setting the color
          dialog.getContentPane().setBackground(jLabel2.getBackground());

        dialog.setModal(true);
        Assignment_Tajmer_Aplikacija.f.setVisible(false);    

        return null;
       }
       protected void done() {
           System.out.println("Done!");
       }
        };
        sw.execute();



       }                                        

       private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
           // TODO add your handling cosadde here:
           jSlider1.addChangeListener(new ChangeListener() {
         public void stateChanged(ChangeEvent e) {
           JSlider source = (JSlider) e.getSource();
           //System.out.println(source.getValue());

         }
       });
       }
您有两种选择:

  • 计算当前日期和目标日期之间的时间差(以毫秒为单位)。因此,您可以启动摆动计时器。类似于
    myDate.getTime()-Sytem.currentTimeMillis()
    (可能并不总是正确的)
  • 你使用一个为你做这件事的库(例如)。在这种情况下,需要使用方法
    SwingUtilities.invokeLater(Runnable)
    将作业与Swing线程同步
  • 不要在Swing应用程序中使用
    Thread.sleep()
    。改为启动计时器。

    您有两种选择:

  • 计算当前日期和目标日期之间的时间差(以毫秒为单位)。因此,您可以启动摆动计时器。类似于
    myDate.getTime()-Sytem.currentTimeMillis()
    (可能并不总是正确的)
  • 你使用一个为你做这件事的库(例如)。在这种情况下,需要使用方法
    SwingUtilities.invokeLater(Runnable)
    将作业与Swing线程同步
  • 不要在Swing应用程序中使用
    Thread.sleep()
    。改为启动计时器