我有一个自定义的JDialog,当我的SwingWorker线程启动时会弹出。该对话框只有一个JProgressbar和一个Button(取消按钮)。我试图弄清楚如何取消我的SwingWorker,但是没有运气。我想我走对了。我编写了一个cancel方法,现在我只需要弄清楚按下按钮时如何调用它。代码如下…
btn_Cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
//trying to access cancel()
}
});
SwingWorker worker = new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
while (runLoad.getState() != Thread.State.TERMINATED && !isCancelled()) {
try {
synchronized (this) {
Thread.sleep(2000);
}
} catch (InterruptedException e){}
}
return null;
}
@Override
public void done() {
try {
get();
} catch (InterruptedException | ExecutionException ex) {
JOptionPane.showMessageDialog(null,
"Somethings Wrong: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
Progress.setVisible(false);
Progress.dispose();
}
public void cancel(SwingWorker worker){
worker.cancel(true);
}
};
worker.execute();
您的取消按钮应调用该SwingWorker#cancel
方法
final SwingWorker worker = ...;
btn_Cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
worker.cancel( true );
}
});
在您的工作人员中,必须确保检查取消标志
SwingWorker worker = new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
while ( !isCancelled() ) {
//do your stuff
}
}
}
请注意,在创建自己的工作程序之前,需要先创建工作程序 ActionListener
我正在尝试防止我的android应用程序中出现OutOfMemoryError。我读过很多帖子,但我还不能解决它。 该应用程序有背景活动,所以我认为这是主要问题。OutOfMemoryError仅在某些设备中发生(可能是由于VM堆),我需要确保此错误不会在任何设备中产生崩溃。 我最近读了关于MAT(内存分析插件),我在应用程序运行时执行了它,在这里你可以看到结果: 支配树 汇报 在这项活动中,我对
问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当
在我的Espresso测试执行和AlertDialog会被提示并等待用户响应。Espresso测试只有在我按下“Accept”按钮但我想测试代替用户执行此事件时才会继续。 我注意到我的线程选项卡上有以下状态
问题内容: 每个响应式网站开发教程都建议使用CSS属性来隐藏内容,以防止内容在移动浏览器中加载,从而使网站加载速度更快。是真的吗 难道不加载图像或它仍然加载在手机浏览器的内容?有什么方法可以防止在移动浏览器上加载不必要的内容? 问题答案: 浏览器变得越来越聪明。今天,如果浏览器(取决于版本)可以确定图像没有用,则可能会跳过图像加载。 该图像具有样式,但是脚本可以读取其大小。如果父级为隐藏状态,Ch
问题内容: 当try块中存在时,我对try- finally执行感到困惑。据我了解,finally块将始终执行,即在返回调用方法之前。在考虑以下简单代码时: 实际打印的结果为1。这是否意味着不执行finally块?有人可以帮我吗? 问题答案: 从块返回时,返回值存储在该方法的堆栈帧中。之后,将执行finally块。 更改finally块中的值不会更改堆栈中已存在的值。但是,如果您从finally块
英文原文: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/ 在一个路由过渡过程中,Ember路由器将一个过渡对象传递给过渡相关的路由的各种钩子。任何可以访问过渡对象的钩子,都可以通过调用transition.abort()来立即取消当前过渡,如果保存了该过渡对象,那么在后续可以通过调用transition