2016-12-31 41 views
1

此代碼應無限期運行。然而,它成功運行一次,然後再也不會。沒有例外,所以我無法弄清楚我做錯了什麼。但是,如果未調用nextExpression,則它將無限期地運行。計劃執行器服務只運行一次,不會拋出異常

下面是代碼:

onCreate() { 

    Runnable Runnable = new Runnable() { 
     public void run() { 
      System.out.println("Hello world"); 
      nextExpression(); 
     } 
    }; 

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); 
    executor.scheduleAtFixedRate(Runnable, 0, 3, TimeUnit.SECONDS); 
} 


int i = 0; 

public void nextExpression() { 
    i++; 
    expression.setText("" + i); 
} 
+1

這是'expression'類型和什麼'setText'實施遏制? –

+0

表達式類型是一個textView – james

回答

3

我測試和運行,因爲它應該,如果你想更新你應與主線程做一個UI組件。

要更新主線程TextView的,你可以做這樣的:

public void nextExpression() { 
    i++; 
    runOnUiThread(new Runnable() { 
     public void run() { 
      expression.setText("" + i); 
     } 
    }); 
} 
+0

我必須修改哪部分才能工作? – james

3

你的UI更新是不會發生在UI線程,但在線程池線程,這是行不通的。中繼更新UI線程修改

expression.setText("" + i); 

expression.post(new Runnable() { 
      @Override 
      public void run() { 
       expression.setText("" + i); 
      } 
     }); 
相關問題