相关疑难解决方法(0)

如何取消SwingWorker的执行?

目前我有两个SwingWorker线程在后台工作.如果发生异常,该方法将停止工作,但该线程仍然运行.

如何停止执行并杀死doInBackground()发生异常的线程?

this.cancel(true)不要破坏/关闭线程.我怎样才能做到这一点?

@Override
protected Boolean doInBackground() throws Exception {
        try {
            while (true) {
                //some code here                   
                return true;
            }
        } catch (Exception e) {       
            this.cancel(true); //<-- this not cancel the thread               
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在Netbeans的调试中看到了这些线程.

'AWT-EventQueue-0' em execução
'AWT-Windows' em execução
'SwingWorker-pool-1-thread-1' em execução
'SwingWorker-pool-1-thread-2' em execução

//*em execução = in execution
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker cancellation

6
推荐指数
2
解决办法
2万
查看次数

Java + Swing:编写代码以合并更改事件

我有这个数据流,粗略地说:

DataGenerator -> DataFormatter -> UI
Run Code Online (Sandbox Code Playgroud)

DataGenerator可以快速生成数据; DataFormatter可以将其格式化以用于显示目的; UI只是一堆Swing元素.

我想让我的DataGenerator像这样:

class DataGenerator
{
   final private PropertyChangeSupport pcs;
   ...
   public void addPropertyChangeListener(PropertyChangeListener pcl) {
     this.pcs.addPropertyChangeListener(pcl); 
   }
   public void removePropertyChangeListener(PropertyChangeListener pcl) {
     this.pcs.removePropertyChangeListener(pcl);
   }
}
Run Code Online (Sandbox Code Playgroud)

this.pcs.firePropertyChange(...)只要我的数据生成器有新数据就调用; 然后,我可以做dataGenerator.addPropertyListener(listener)在那里listener负责推动变化着的DataFormatter,然后到用户界面.

这种方法的问题在于,每秒有数千个dataGenerator更改(根据我的情况,每秒10,000到60,000之间),并且为UI格式化它的计算成本足够高,它会给我带来不必要的负担中央处理器; 我真正关心的是每秒最多10-20次变化.

有没有办法使用类似的方法,但在变更事件到达DataFormatter之前合并它们?如果我收到关于单个主题的多个更新事件,我只关心显示最新的事件,并且可以跳过所有以前的事件.

java swing event-queue

6
推荐指数
1
解决办法
1272
查看次数

按下按钮时如何继续执行工作?

我希望在按下按钮时继续执行工作,使用Java.释放按钮后,工作应该停止.像这样的东西:

Button_is_pressed()
{
    for(int i=0;i<100;i++)
    {
        count=i;
        print "count"
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?

java onclick jbutton buttonclick

4
推荐指数
1
解决办法
4765
查看次数