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