2013-07-19 11 views
2

我试图使用大量的SwingWorkers(〜100)。我有一个类使用大量的并发SwingWorkers

Creature extends SwingWorker<Creature, Point> 

我想让每个实例化在同一时间独立移动。我使用SwingWorker,因为每个实例化的位置都在GUI中表示,并且不断更新。目前,只有10个会移动,其他的不会,因为the max thread limit of SwingWorker is 10.链接文章的建议是将每个SwingWorker放在它自己的线程中,因为它们实现了Runnable,并允许绕过这个限制。

我试图做到这一点,但没有显示出来,所以很明显我已经搞砸了。如何增加可用SwingWorkers的数量(使用文章中指定的方法或其他方法)?

Executor ex = Executors.newCachedThreadPool(); 
for(int i = 0; i < 20; i++){ 
    final Creature c = new Creature(this); 
    Thread t = new Thread(c){ 
     public void run(){ 
     c.execute(); 
     } 
    }; 
    ex.execute(t); 
} 
+1

不要通过线程提供给Executor。而是传递Runnable。 –

+0

@PeterLawrey你的意思是'Runnable t = new Thread(c){...}'?我只是试过,它不起作用 – Daniel

+0

我的意思是根本不创建线程。如果这不起作用,你做错了什么。 'Executor.execute(Runnable)'带有一个Runnable。 –

回答

1

我建议你写

Executor ex = Executors.newCachedThreadPool(); 
for(int i = 0; i < 20; i++){ 
    final Creature c = new Creature(this); 
    ex.execute(new Runnable(){ 
     public void run(){ 
     c.execute(); 
     } 
    }); 
} 

甚至改变​​到run(),使生物Runnable

Executor ex = Executors.newCachedThreadPool(); 
for(int i = 0; i < 20; i++) 
    ex.execute(new Creature(this));