gpt4 book ai didi

java - 如何用停止按钮停止执行?

转载 作者:行者123 更新时间:2023-12-01 04:42:53 26 4
gpt4 key购买 nike

我正在创建一个将数据从日志文件发送到数据库的程序。当我点击运行按钮时,程序应该启动,当我点击停止按钮时,程序应该停止。到目前为止,当我点击“运行”按钮时,我能够让它运行,但无法停止它。有人可以帮助我吗?

我想要停止的程序是这个(我认为所有这些对于停止来说并不重要,但我会放置整个程序):

private void RunActionPerformed(java.awt.event.ActionEvent evt){
// Creating a Timer object and scheduling the program to run every ten minutes
if(evt.getSource() == Run) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
public void run() {
try {
// THE CODE, WITH WHAT HAS TO BE DONE
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,ex);;
} catch (IOException ex) {
JOptionPane.showMessageDialog(null,ex);;
} catch (InstantiationException ex) {
JOptionPane.showMessageDialog(null,ex);;
} catch (IllegalAccessException ex) {
JOptionPane.showMessageDialog(null,ex);;
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null,ex);;
}
}
}, 0, 60 * 1000 * 10); //Number of minutes, until the program starts to run again
}
}

private void StopActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
}

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

最佳答案

与 C# 不同,Java 在异步任务取消方面没有“可行的方法”。由于我也需要一个可取消的任务,所以我改编了美丽的 Cancel-Token pattern来自.NET:

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

public abstract T runCancelable(CancellationToken token) throws OperationCanceledException;

将异步运行代码放在那里 - 并定期检查 CancellationToken的方法isCancellationRequested()。如果返回 true,则返回。 (您可以通过这种方式进行干净的取消处理)

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

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);

现在,要取消任务,您可以使用 CancellationTokenSource:

cancelSrc.cancel();

关于java - 如何用停止按钮停止执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com