Java 如何使用停止按钮停止执行?

Java 如何使用停止按钮停止执行?,java,multithreading,swing,Java,Multithreading,Swing,我正在创建一个程序,将数据从日志文件发送到数据库。程序应该在我按下运行按钮时启动,在我按下停止按钮时停止。直到现在,当我按下run(跑步)按钮时,我能够让它跑起来,但却无法阻止它。有人能帮我吗 我想停止的程序是这样的(我不认为所有这些对于停止来说都很重要,但我会把整个程序放在下面): 那我该怎么做才能阻止它呢?提前感谢与C#不同,Java在异步任务取消方面没有“出路”。由于我也需要一个可取消的任务,我从.NET中改编了beautiful: 您的任务(MyAsyncTask)必须继承并覆盖抽象方法

我正在创建一个程序,将数据从日志文件发送到数据库。程序应该在我按下运行按钮时启动,在我按下停止按钮时停止。直到现在,当我按下run(跑步)按钮时,我能够让它跑起来,但却无法阻止它。有人能帮我吗

我想停止的程序是这样的(我不认为所有这些对于停止来说都很重要,但我会把整个程序放在下面):

那我该怎么做才能阻止它呢?提前感谢

与C#不同,Java在异步任务取消方面没有“出路”。由于我也需要一个可取消的任务,我从.NET中改编了beautiful:

您的任务(MyAsyncTask)必须继承并覆盖抽象方法

public abstract T runCancelable(CancellationToken token) throws OperationCanceledException;
将异步运行代码放在那里,并定期检查的方法isCancellationRequested()。如果返回true,则返回。(通过这种方式,您可以完全取消处理)

因此,运行可取消的任务如下:()


不是很优雅,但很简单:使用布尔值:

 public void run() {
   if (go) {
     //...
   }
 }
}                                   

private void StopActionPerformed(java.awt.event.ActionEvent evt) {                                     
 go = false
}           

并在启动按钮的actionPerformed中添加“go=true”

如果您的程序被类似于DB操作的阻塞调用击中,则除了终止DB连接之外,没有其他选项可以退出程序。所以,若Db操作开启,则停止按钮无法工作


在其他情况下,最简单的方法是在stop方法上使用thread类的“interrupt”函数中断线程,然后在run方法中检查中断异常以正常退出。

我的上帝,这是一堵代码墙。请把它缩减到绝对必要的部分。您可以使用Thread.currentThread().interrupt();我更新了代码,因为从我阅读的内容来看,我需要在声明方法时做些什么,但我不知道该做什么,该放在哪里..这,可能会在所说的方向上给出一些想法,我希望:-)@HoryHene:这个线程相关,可能也能帮到你,请看一下:-)将DB操作分成小块(如果可能的话)并检查块之间的停止布尔。@rossum:在大多数情况下不可行。如果可能的话,这将是一个地狱般的工作。所以这将是一个地狱般的工作……我知道我的可能性是什么……这不是我程序中必须的东西……但我希望它更方便用户:)谢谢
CancellationTokenSource cancelSrc = new CancellationTokenSource();
CancelableTask<Object> task = new MyAsyncTask(cancelSrc.getToken());
//since CancelableTask is a Runnable, you can pass it to any ExecutorService
executor.execute(task);
cancelSrc.cancel();
 public void run() {
   if (go) {
     //...
   }
 }
}                                   

private void StopActionPerformed(java.awt.event.ActionEvent evt) {                                     
 go = false
}