作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个将数据从日志文件发送到数据库的程序。当我点击运行按钮时,程序应该启动,当我点击停止按钮时,程序应该停止。到目前为止,当我点击“运行”按钮时,我能够让它运行,但无法停止它。有人可以帮助我吗?
我想要停止的程序是这个(我认为所有这些对于停止来说并不重要,但我会放置整个程序):
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/
我是一名优秀的程序员,十分优秀!