从线程捕获ActionEvents

时间:2013-11-03 19:17:13

标签: java multithreading swing actionlistener actionevent

我需要做的是生产者/消费者计划。我需要做2个生产者线程(第1个将继续发送一个具有4秒休息的AcionEvent,第2个将执行相同的10秒休息)。消费者线程需要是带有JTextArea的JFrame。我需要实现ActionPerformedListner来捕获生成器创建的事件。什么时候我会抓住第一,甚至我需要清除JTextArea文本。当我将抓住第二个事件时,我需要填写一些文字。我不知道如何将ActionEvent发送到消费者线程。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

没有这么好的伙伴,首先两个线程(生产者/消费者)都应该处于waiting状态,为此,你需要两个对象,一个用于发信号通知第一个线程,第二个用于第二个线程。 /> 而且这里不需要生产者的两个线程。 这样的事情。

final Object producer=new Object();//used for signaling the thread about the incoming event
final Object signalConsumer;//used for signaling consumer thread.
void run(){
while(true){//until end of the system life cycle, use a flag, or set the thread daemon
 try{
  synchronized(producer){producer.wait();}
  Thread.sleep(4000);//sleep for 4 s
   synchronized(consumer){signalConsumer.notify();}//send the first signal to consumer to clear the textbox
  Thread.sleep(10000);//sleep for 10 seconds
   synchronized(consumer){signalConsumer.notify();}//send the second signal to consumer for filling the textbox
 }catch(Exception ex){}
}
}

和消费者线程。 final Object signalConsumer = new Object(); //将引用传递给生产者线程。

void run(){
while(true){
 try{
  synchronized(signalConsumer){signalConsumer.wait();}//waiting for the first signal
  //clearing textbox, etc...
  synchronized(signalConsumer){signalConsumer.wait();}//waiting for the second signal
  //filling the textbox, etc...
 }catch(Exception ex){}
}
}

并在您捕获事件的UI线程中通知生产者线程。