2013-05-19 61 views
0

所以,我的問題是...我是一個java和android的初學者。 當我點擊第一個按鈕(線程是其他部分代碼所需的線程)時,我想要做的就是讓布爾「活動」變爲「真」,然後當第二個按鈕被點擊時& active == true,Player1Score變成+1。 所以問題是我不能在線程&我的onClickListener中使用非最終變量,但我不能使用最終變量,因爲我需要在代碼中更改它們。 如果可能請給予初學者友好的答案,謝謝!更改內部類中的變量

[...] 
    boolean active; 
    int Player1Score, Player2Score; 

    Player1Score = 0; 
    Player2Score = 0; 


    Button button_launch = (Button) findViewById(R.id.button_launch); 
    button_launch.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      [...] 

      new Thread(new Runnable() { 
       public void run() { 
        [...] 

        active = true; 

       } 

      }).start(); 

     } 
    }); 

    [...] 

    Button button_player1 = (Button) findViewById(R.id.button1); 
    button_player1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      if(active == true){ 

       Player1Score++; 
      } 
     } 
    }); 

回答

1

看看java.util.concurrent.atomic.AtomicBoolean。我認爲這將完全取決於你想要的。你能避免這個

+0

幫助了很多,謝謝! –

0

的一種方法是使用另一個變量來使用你的監聽器裏

final boolean variable = active; 
Button button_player1 = (Button) findViewById(R.id.button1); 
button_player1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     if(variable == true){ 

      Player1Score++; 
     } 
+0

這很棒,但是如何在另一個線程中更改原始「活動」值? –

0

還有一個方法是讓讓你的布爾值「波動」,即它在Java中的關鍵字,這使得線程從主內存讀取特定變量的值,而不是緩存它們的值。 例如。 volatile boolean active = false;

+0

有沒有辦法做到這一點整數? (我已經有了這個問題的答案,但是謝謝) –

+0

它也可以應用到整數(只有變量沒有方法)。 –