繁体   English   中英

如何使用 MouseListener 打破循环 java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM