我有一大堆的复选框,单选按钮,允许用户过滤掉的项目在JTable
。每次的事件需要被拧避免GUI凝固起来的。如何排队一堆用户驱动的Java Swing事件
我想这样做是排队在他们收到的订单对他们的活动和行为。
目前,我有以下的设计,但我认为必须有一个更好的办法。基本上,我已经为每个潜在的排队方法,一个映射到它的整数。该整数值被添加到每个actionPerformed
方法执行循环中的整数并转换为函数调用的列表中。
我可能想使用的EventQueue调用运行就可以了。这种类型的功能最好的模式或技术是什么?
Vector<Integer> taskQueue;
/**
* Adds tasks to a queue things are completed in the order they were added. This allows for
* threading and concurrency issues.One task is done at a time.
* @param
*/
private void doTasks()
{
if(!queueIsRunning)
{
doTasks = new Thread(){
public void run()
{
queueIsRunning = true;
while(!taskQueue.isEmpty())
{
intVal = taskQueue.get(0);
taskQueue.remove(0);
switch(intVal)
{
case DOM_HIGHLIGH_TASK:
System.out.println("starting dom highlight");
highlightDom();
break;
case FLASH_HIGHLIGH_TASK:
System.out.println("starting flash highlight");
higlightFlash();
break;
case SQL_HIGHLIGH_TASK:
System.out.println("starting sql highlight");
highlightSQL();
break;
case INFO_HIGHLIGH_TASK:
System.out.println("starting infoleak highlight");
highlightInfoLeak();
break;
case HTMLCOM_HIGHLIGH_TASK:
System.out.println("starting htmlcomm highlight");
highlightHtmlComments();
break;
case SORT_EXTENSIONS:
sortExtensions();
}
}
queueIsRunning = false;
}
};
doTasks.start();
}
}
因此,让我们假设功能正在搜索模型两个复选框。如果我们假设每次检查导致大约30秒的过程,该怎么办?如果用户一个接一个地检查,我不想处理并发问题。如果每个函数都在它自己的SwingWorker内部类函数中,它们会被正确处理吗? – steve 2011-05-28 18:07:58