2016-12-03 208 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; 
     } 
    } 
}