0

所以,我的问题是......我是java和android的初学者。我想要做的是让布尔“活动”变为“真”,当第一个按钮被点击(线程是代码的其他部分所必需的)然后,当第二个按钮被点击&活动==真, 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++;
            }
        }
    });
4

3 回答 3

1

看看 java.util.concurrent.atomic.AtomicBoolean。我认为它会完全符合您的要求。

于 2013-05-19T15:54:40.217 回答
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++;
        }
于 2013-05-19T15:55:36.460 回答
0

另一种方法是使您的布尔值“易失”,即它是java中的一个关键字,它使线程从主内存中读取该特定变量的值而不缓存它们的值。例如。volatile boolean active=false;

于 2013-05-19T16:11:18.920 回答