Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用线程中断jFrame类中的递归函数_Java_Multithreading_Jform - Fatal编程技术网

Java 使用线程中断jFrame类中的递归函数

Java 使用线程中断jFrame类中的递归函数,java,multithreading,jform,Java,Multithreading,Jform,我目前有一个jFrame窗口,其中一个按钮执行一个长时间的递归函数 我想要的是,当我点击窗口的另一个按钮时,程序停止函数的执行 这是我的密码: public class CrawlerInterface extends javax.swing.JFrame { public CrawlerInterface() { initComponents(); } private void playButtonActionP

我目前有一个jFrame窗口,其中一个按钮执行一个长时间的递归函数

我想要的是,当我点击窗口的另一个按钮时,程序停止函数的执行

这是我的密码:

 public class CrawlerInterface extends javax.swing.JFrame 
 {
       public CrawlerInterface() 
       {
           initComponents();
       }

    private void playButtonActionPerformed(java.awt.event.ActionEvent evt) 
    {

       playButton.setEnabled(false);
       stopButton.setEnabled(true);

       Crawler.crawl("http://www.mywebsite.com", "site"); //That's the one to interrupt
    }

    private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) 
    {
       stopButton.setEnabled(false);
       playButton.setEnabled(true);

       //Interrupt crawl function here!
    }
    [...]
 }
如何使用线程修改上述代码?如果有一种不使用线程的方法,请告诉我


提前感谢您。

如果您在后台线程中运行代码(只要它不接触任何UI组件,就完全可以),您可以
中断线程。或者设置一个布尔变量作为停止递归的基本条件。一旦输入方法并设置了变量,则停止递归。
下面是一个示例

private static volatile boolean stop = false;  

public static void stop(){  
   stop = true;  
}  

public void Crawler.crawl(String url, String word){  
    if(stop) return;
    else{ ... //recurce}  
}  



private void playButtonActionPerformed(java.awt.event.ActionEvent evt) 
{

       playButton.setEnabled(false);
       stopButton.setEnabled(true);

       Thread t = new Thread(new Runnable(){  
              @Override  
              public void run(){  
                    Crawler.crawl("http://www.mywebsite.com", "site"); //That's the one to interrupt  
               }  
        });  
        t.start();  
}  


 private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) 
    {
       stopButton.setEnabled(false);
       playButton.setEnabled(true);

       Crawler.stop();  //or you could keep reference to t and call interrupt
    }

不过,我在这里怎么用它们呢?更准确地说是SwingWorker。当然可以,但请给我一些密码。我尝试了很多东西,但我对可运行类、运行方法等概念迷茫了:(我不能在这里写它,因为它太长了,但它是一个无线程的递归函数,可以对网站进行爬网,并将其所有文章写入特定文件夹中的txt文件中。是否正确?
t=new Thread(){public void run(){Crawler.crawl()http://www.mywebsite.com“,“现场”)};t.start();
和在停止按钮中
t.interrupt();