[英]How to break a loop using MouseListener java
我正在尝试制作一个 A* 寻路算法我的代码是这样的
public class Board extends JPanel implements MouseListener{
public void mousePressed(MouseEvent e){
if (StartAndEnd())
AStar();
}
}
现在的问题是 AStar 寻路算法需要大量时间来计算,我想打破它以防用户做出其他选择。 (另一个用鼠标开始和结束输入)。
我怎样才能做到这一点?
这是一个小型演示程序,它创建一个带有停止按钮的 JFrame(窗口)。 除非您按下停止按钮,否则它会循环 10,000 秒。
停止按钮设置一个终止循环的标志。
希望您能从这段代码中找出解决原始问题的方法。 我修改了示例以在新线程中调用 runLongTime,单独保留 Swing GUI 线程。
import java.awt.event.*;
import javax.swing.*;
public class Stoppable extends Thread implements ActionListener
{
public static void main (String[] args)
{
final Stoppable app = new Stoppable ();
app.start ();
}
private final JFrame frame = new JFrame ("Stoppable");
private final JButton stop = new JButton ("Stop");
private final JPanel panel = new JPanel ();
private boolean isRunning = true;
public Stoppable ()
{
panel.add (stop);
frame.setContentPane (panel);
stop.addActionListener (this);
frame.pack ();
frame.setVisible (true);
}
@Override
public void run ()
{
try
{
runLongTime ();
}
catch (final InterruptedException e)
{
e.printStackTrace ();
}
System.exit (0);
}
private void runLongTime () throws InterruptedException
{
for (int i = 0; i < 10000 && isRunning; i++)
{
System.out.printf ("Iteration %d\n", i);
Thread.sleep (1000);
}
System.out.printf ("Stopped\n");
}
@Override
public void actionPerformed (ActionEvent e)
{
isRunning = false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.