2016-12-03 80 views
0

因此,我使用Java中的Robot类在夜间自动执行任务。我需要它在上午1:10:10完成任务,但它不适用于我的测试。我将时间与当前时间匹配,但是需要加一分钟进行测试。它不执行任务。这里是我的(编辑,取得了整一个布尔现在还)主代码:在特定时间执行任务

private void startStopButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    Calendar cal = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss"); 
    String time = sdf.format(cal.getTime()); 
    System.out.println(time); 
    press = true; 
    while(press == true){ 
     if(time.equals("09:39:10")){ 
      System.out.println("well its time"); 
      try { 
       rightClick(); 
       TimeUnit.SECONDS.sleep(2); 
       click(573, 255); 
       TimeUnit.SECONDS.sleep(2); 
       click(648, 294); 
       TimeUnit.SECONDS.sleep(2); 
       keyPress(); 
       TimeUnit.SECONDS.sleep(2); 
       press = false; 
      } catch (AWTException | InterruptedException ex) { 
       Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      break; 
     } 
    } 
}      

这里是我的方法:

private void rightClick() throws AWTException{ 
    Robot bot = new Robot(); 
    bot.keyPress(KeyEvent.VK_5); 
    bot.delay(500); 
    bot.keyRelease(KeyEvent.VK_5); 
    bot.delay(1000); 
    bot.mousePress(InputEvent.BUTTON3_DOWN_MASK); 
    bot.delay(500); 
    bot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); 
} 

private void click(int x, int y) throws AWTException{ 
    Robot rob = new Robot(); 
    rob.mouseMove(x, y); 
    rob.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
    rob.delay(500); 
    rob.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
} 

private void keyPress() throws AWTException{ 
    Robot r = new Robot(); 
    r.keyPress(KeyEvent.VK_T); 
    r.delay(500); 
    r.keyRelease(KeyEvent.VK_T); 
    r.delay(500); 
} 

所以,我希望任何人都可以见识一下为什么它不是”不要做任务。 :)

+0

你调试过吗?你确定你的日期字符串格式正确吗? – Carcigenicate

+0

上面是什么?它在哪里宣布和初始化? – nullpointer

+0

'press'是一个整数,每次按下startStop按钮时加1。是的,我已确保我的数据字符串格式正确。 –

回答

0

有你可以遵循两个调试点 -

  1. presspress = 0被初始化为满足,而条件。虽然这似乎是一个无限循环后发布。除非你的代码遇到异常。

  2. 在您if条件,尝试更改为

    if(sdf.format(cal.getTime()).equals("08:15:10") // notice the starting 0 
    

,因为你在这里比较两个字符串,而不是整数值。

+0

仍然无法正常工作。 while(press == 1){sdf.format(cal.getTime())。equals(“08:36:10”)){0} {System.out.println(“well its time”); 'int press = 0;' –

+0

它甚至不打印它。 –

+0

@BrennanB。你可以用te完整的方法/类更新问题。 – nullpointer

0

我已经想出了我自己的问题!事实证明,它只检查了我按下按钮的时间,所以它从来没有检查过后的时间。这里是固定代码:

private void startStopButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    press = true; 
    System.out.println(press); 
    while(press == true){ 
     Calendar cal = Calendar.getInstance(); 
     SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss"); 
     String time = sdf.format(cal.getTime()); 
     System.out.println(time); 
     if(time.equals("10:27:10")){ 
      System.out.println("well its time"); 
      try { 
       rightClick(); 
       TimeUnit.SECONDS.sleep(2); 
       click(573, 255); 
       TimeUnit.SECONDS.sleep(2); 
       click(648, 294); 
       TimeUnit.SECONDS.sleep(2); 
       keyPress(); 
       TimeUnit.SECONDS.sleep(2); 
       press = false; 
      } catch (AWTException | InterruptedException ex) { 
       Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      break; 
     } 
    } 
}