Я создаю Java-программу и хочу приостановить ее, пока не будет определен щелчок мыши с помощью MouseListener.Как бы я «приостановил» программу, например, используя цикл, таким образом, чтобы MouseListener все еще работал, и программа могла вернуться к тому же методу?
Я попытался поставить цикл, чтобы остановить программудо тех пор, пока переменная не станет true, но MouseListener не сможет работать, если цикл запущен.
Я также пытался поместить оставшуюся часть кода в метод mouseClicked или запускать новые методы из mouseClicked, однако другая ошибкапроизошло потому, что я не могу использовать Graphics g нигде, кроме paintComponent, поэтому мне кажется, что для приостановки программы необходим цикл.
Вот упрощенная программа, которую я создал, чтобы показать суть проблемы,(Не полный код).
class Surface extends JPanel implements MouseListener{
@Override
public void mouseClicked(MouseEvent arg0) {
//Some way to unpause program
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(30, 30, 200, 30);
//The program needs to 'pause' here until a click is identified.
System.out.println("Program finishes here");
}
}
MouseListener работает, однако кажется, что он работает, только если программа неактивна и завершила весь код в paintComponent.
Вот код, который не работает, поскольку цикл работает.
class Surface extends JPanel implements MouseListener{
public static boolean repeatLoop = true;
@Override
public void mouseClicked(MouseEvent arg0) {
repeatLoop = false;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(30, 30, 200, 30);
while (repeatLoop) {
}
System.out.println("Program finishes here");
}
}
Я ожидал, что цикл, сообщающий потоку о спящем режиме, может также работать, но это имеет тот же результати MouseListener не может быть вызван.
Поэтому я спрашиваю, почему MouseListener не может функционировать во время выполнения цикла, и есть ли простой способ предотвратить эту проблему и приостановить программу, пока не будет запущен код mouseClicked.