Я использую класс this от Sedgewick и Wayne, и мне нужно получить координаты с помощью мыши, когда он нажат в стандартном окне рисования. Этот класс имеет метод boolean mousePressed, который идентифицирует, когда мышь нажата, и мы можем получить координаты из точки, когда мышь нажата в этой точке. Я попытался изменить код Java, чтобы сделать что-то подобное для щелчка мыши:Получить координаты одного щелчка мыши
public static boolean mouseClicked() {
synchronized (mouseLock) {
return mouseClicked;
}
}
. . .
public void mouseClicked(MouseEvent e) {
synchronized (mouseLock) {
mouseX = StdDraw.userX(e.getX());
mouseY = StdDraw.userY(e.getY());
mouseClicked = true;
}
}
...
public void mouseReleased(MouseEvent e) {
synchronized (mouseLock) {
mousePressed = false;
mouseClicked = false;
}
}
Если я запускаю следующую программу
public class test {
public static void main(String[] args) {
while(true){
if (StdDraw.mouseClicked()) {
System.out.println("hello");
}
}
}
}
Он держит печать привет (так это означает, что mouseClicked возвращается правда. Как я могу заставить его остановиться? Я попытался установить mouseClicked = false на выпущенное событие, но не работал. Что я делаю wron г? Во-первых, я попытался использовать mousePressed, чтобы понять суть, но я не мог использовать его, чтобы получить две точки.
Спасибо!
Сделать MouseClicked летучего – MadProgrammer
@MadProgrammer Я не понимаю, как это может помочь. – Giiovanna
У вас есть потенциальное состояние гонки нити, где один поток не считывает фактическое значение, которое меняется другим. См. [Atomic Access] (https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html) для получения более подробной информации – MadProgrammer