我有這個計時器在這裏:爪哇 - 在後臺線程處理定時器事件
timer = new Timer(delay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
doWork();
} catch (JMSException e1) {
e1.printStackTrace();
}
}
});
timer.start();
調用此代碼:
public void doWork() throws JMSException {
String fileContent = getFileContent();
Session session = queue.getConnection().createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = session.createQueue(queue.getName());
MessageProducer producer = session.createProducer(dest);
TextMessage message = session.createTextMessage();
//Different and not less than to be able to create permanent producers
for (int i = 0; i != numberOfMsgsInBurst; i++) {
message.setText(fileContent);
producer.send(message);
}
/*
* Send a non-text control message indicating end of messages.
*/
producer.send(session.createMessage());
}
至於我遇到,當的doWork被稱爲定時器,它會阻塞系統(例如GUI)。我希望能夠永久運行此doWork方法(將numberOfMsgsInBurst設置爲-1),以便生產者永久生成消息。 我遇到的問題是它阻塞系統,所以系統停止響應。
有什麼辦法可以在後臺線程中觸發這個事件嗎?
感謝, 奧斯卡
這可能是最好的方法。我不知道java.util.Timer。 – 2010-12-16 09:56:57