Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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/处理鼠标压入循环不工作_Java_Processing_Event Dispatch Thread - Fatal编程技术网

Java/处理鼠标压入循环不工作

Java/处理鼠标压入循环不工作,java,processing,event-dispatch-thread,Java,Processing,Event Dispatch Thread,所以我用Java+处理制作了一个简单的游戏,在draw()中有按钮和循环。显然,如果有循环,PApplet函数mousePressed()就不能持续工作,因此我尝试在循环期间检查我自己的checkmouse()函数。然而,它仍然不起作用。我怎样才能在运行一个带有while循环的游戏的同时不断检查鼠标是否被按下 //draw() func public void draw() { for (int i = 0; i < 10000; i++) { //to simulate

所以我用Java+处理制作了一个简单的游戏,在draw()中有按钮和循环。显然,如果有循环,PApplet函数mousePressed()就不能持续工作,因此我尝试在循环期间检查我自己的checkmouse()函数。然而,它仍然不起作用。我怎样才能在运行一个带有while循环的游戏的同时不断检查鼠标是否被按下

//draw() func
public void draw() {

    for (int i = 0; i < 10000; i++) {    //to simulate a while loop
        //do something, like run some other functions that create the buttons
        checkmouse();
    }
}

//checkmouse function
public void checkmouse() {

    if (mousePressed) {
        System.out.println("x");
    }
}
在调用
draw()
函数之间,
事件变量(
mousePressed
keyPressed
等)将更新

换句话说:
mousePressed
函数在调用
draw()
函数时将永不改变。如果希望更新事件变量,则需要完成
draw()
函数,然后再次调用该函数

在幕后,这是因为处理是单线程的。(这是出于设计,因为多线程UI程序是一场噩梦。)

退一步说,您可能不希望在
draw()函数中包含长循环。利用处理实现的60 FPS循环。

1)不要阻塞EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。2) 为了更快地获得更好的帮助,请添加或。
boolean esc = false;
while (!esc) {
    if (mousePressed) {
        System.out.println("x");
        esc = true;
    }
}