2014-01-26 109 views
1

因此,在我的聊天機器人程序中,我想讓它在等待大約2秒後等待它回答之前說了些什麼。我嘗試了睡眠方法,但這使得我所說的延遲以及... 我試圖找到等待方法上的東西,但我似乎無法找出它是如何工作的,所以這裏是我的一段代碼來回答。 我想在等待2秒後再做「addText(ft.format(dNow)+」| - >你:\ t「+ quote);」部分,然後編寫聊天機器人Chatbot在說點什麼和獲得答案之間的延遲

if(e.getKeyCode()==KeyEvent.VK_ENTER) 
     { 
         Date dNow = new Date(); 
         SimpleDateFormat ft = 
         new SimpleDateFormat ("hh:mm:ss"); 

      input.setEditable(false); 
      //-----grab quote----------- 
      String quote=input.getText(); 
      input.setText(""); 
      addText(ft.format(dNow) + " |-->You:\t"+quote); 

      quote.trim(); 
      while(
       quote.charAt(quote.length()-1)=='!' || 
       quote.charAt(quote.length()-1)=='.' || 
       quote.charAt(quote.length()-1)=='?' 
      ) 
      { 
       quote=quote.substring(0,quote.length()-1); 
      } 
      quote=quote.trim(); 
      byte response=0; 

      //-----check for matches---- 
      int j=0;//which group we're checking 
      while(response==0){ 
       if(inArray(quote.toLowerCase(),chatBot[j*2])) 
       { 
        response=2; 
        int r=(int)Math.floor(Math.random()*chatBot[(j*2)+1].length); 
        addText("\n" + ft.format(dNow) + " |-->Miku\t"+chatBot[(j*2)+1][r]); 
        if(j*2==0){ 
        try (BufferedReader br = new BufferedReader(new FileReader("mikuname.txt"))) { 
         String name; 
         while ((name = br.readLine()) != null) { 
         addText(name +"!"); 
         } 
        } catch (IOException e1) { 
         // Do something with the IO problem that occurred while reading the file 
        } 
       } 
       } 
       j++; 
       if(j*2==chatBot.length-1 && response==0) 
       { 
        response=1; 
       } 
      } 

回答

1

Thread.sleep(),如果你有不同的線程處理的反應只會工作的答案。因爲你沒有,你需要採取不同的方法。

使用ScheduledExecutorService對象將任務安排在未來兩秒鐘。從here採取

// Create the service object. 
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5); 
// Schedule the task for the next 5 seconds. 
ScheduledFuture scheduledFuture = 
scheduledExecutorService.schedule(new Callable() { 
    public Object call() throws Exception { 
     System.out.println("Executed!"); 
     return "Called!"; 
    } 
}, 
5, 
TimeUnit.SECONDS); 

代碼。

相關問題