Как указывают другие ответы, место для выполнения вашей работы - , а не в методах прослушивания событий мыши.
Также в MouseEvent
нет явного понятия «нажатие мышью», поэтому вы должны отслеживать это самостоятельно. Я привел пример того, как это сделать. Также обратите внимание на ссылки MouseEvent.BUTTON1
, так как это просто для отслеживания состояния левой кнопки мыши.
Здесь вы должны начать изучать параллелизм. По этой причине я добавил синхронизированный метод, поскольку вам нужно знать, что забавные вещи случаются, когда несколько потоков обращаются к свойствам одновременно, и synchronized
- это механизм для сохранения этого вменяемого. Считайте это более подробным чтением, выходящим за рамки этого примера.
Не проверено, но это должно работать:
volatile private boolean mouseDown = false;
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
mouseDown = true;
initThread();
}
}
public void mouseReleased(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
mouseDown = false;
}
}
volatile private boolean isRunning = false;
private synchronized boolean checkAndMark() {
if (isRunning) return false;
isRunning = true;
return true;
}
private void initThread() {
if (checkAndMark()) {
new Thread() {
public void run() {
do {
//do something
} while (mouseDown);
isRunning = false;
}
}.start();
}
}