所以,我的问题是......我是java和android的初学者。 我想要做的是当点击第一个按钮时,让布尔“active”变为“true”(该代码的其他部分需要该线程) 然后,当点击第二个按钮时active == true,Player1Score变为+1。 所以问题是我不能在线程中使用非最终变量。我的onClickListener,但我不能使用final变量,因为我需要在代码中更改它们。 如果可能的话,请提供初学者友好的答案,谢谢!
[...]
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++;
}
}
});
答案 0 :(得分:1)
看看java.util.concurrent.atomic.AtomicBoolean。我认为它将完全符合您的要求。
答案 1 :(得分: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++;
}
答案 2 :(得分:0)
另一种方法是使你的布尔值“易变”,即它是java中的一个关键字,它使线程从主内存读取特定变量的值而不缓存它们的值。 例如。 volatile boolean active = false;