Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java lambda外的布尔开关_Java - Fatal编程技术网

Java lambda外的布尔开关

Java lambda外的布尔开关,java,Java,我正在用JavaFX制作一个游戏。差不多完成了,但我遇到了移动检测的问题,想不出简单的解决方案。可能有,但我只是不知道 显然,中间有更多的代码,但我强调了有问题的部分 int finalX = x; int finalY = y; boolean jumpMade = false; boolean moveMade = false; // Mouse Controller board[x][y].setOnMouseClicked(event -> { if (!moveMad

我正在用JavaFX制作一个游戏。差不多完成了,但我遇到了移动检测的问题,想不出简单的解决方案。可能有,但我只是不知道

显然,中间有更多的代码,但我强调了有问题的部分

int finalX = x;
int finalY = y;
boolean jumpMade = false;
boolean moveMade = false;

// Mouse Controller
board[x][y].setOnMouseClicked(event -> {

    if (!moveMade) {
        move(finalX, finalY, selectedMarbleX, selectedMarbleY, selectedMarbleColor);
        // Here I would want to make moveMade = true;
        // To block further possibility of moving.
    }
}
尝试更改为原子或一个元素数组,但这样做行不通,因为用户正在玩的地图有多个可能的移动方向,所以不会阻止所有方向


在lambda表达式中出现变量时,只要将movemake=true放在此处,就会出现最终错误。

如果希望访问和修改lambda表达式中的变量,请将其定义为类/实例变量

Gobbledygook是一个简单的例子

interface Q {
    void fun();
}
class ABC {
    public static boolean x = false;  // class variable
    public static void b(Q q) {
        q.fun();
    }

    public static void main(String[] args) {
        Q a = () -> {
            System.out.println("run simple lambda");
            x = true;
        };
        b(a);
        System.out.println(x);
    }
} 
使用java.util.concurrent.AtomicBoolean实用程序类。它们持有对值的原子线程安全引用

import java.util.concurrent.atomic.AtomicBoolean;

// Outside of lambda, instantiate the atomic boolean reference
AtomicBoolean ref = new AtomicBoolean(); // Constructor parameter optional: empty (false) / true / false

// Inside lambda, use the getters and setters
ref.set(true); // or: ref.set(false);

让movemake成为您的类的字段,或者是实际MouseListener类的字段,而不是局部变量?