我有一个JMS监听器应用程序,而QueueReceive类实现了MessageListener。主要功能如下:
public static void main(String[] args) throws Exception {
InitialContext ic = getInitialContext();
QueueReceive qr = new QueueReceive();
qr.init(ic, QUEUE);
System.out.println("JMS Ready To Receive Messages (
To quit, send a \"quit\" message).");
// Wait until a "quit" message has been received.
synchronized(qr) {
while (! qr.quit) {
try {
qr.wait();
} catch (InterruptedException ie) {}
}
}
qr.close();
}
有没有办法在程序中的特定时间退出应用程序,而不是通过jms消息?
答案 0 :(得分:3)
您可以使用TimerTask [Sample Code]来实现此目的。
示例:强>
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class ExitOn {
Timer timer = new Timer();
TimerTask exitApp = new TimerTask() {
@Override
public void run() {
System.exit(0);
}
};
public ExitOn() {
timer.schedule(exitApp, new Date(System.currentTimeMillis()+5*1000));//Exits after 5sec of starting the app
while(true)
System.out.println("hello");
}
public static void main(String[] args) {
new ExitOn();
}
}
答案 1 :(得分:1)
如果我们谈论JMS,那么实现MessageListener
的类将有一个方法onMessage
,当任何消息进入队列时将调用该方法。您可以实现此方法,以便它可以检查传入消息并在特定条件下调用quit()
方法。
我认为,我们不需要使用while循环来不断检查您的QueueReceive
。
答案 2 :(得分:1)
使用java.util.Timer(不是javax.swing中的那个!)
boolean daemon = true;
Calendar cal = Calendar.getInstance();
//cal.set() to whatever time you want
Timer timer = new Timer(daemon);
timer.schedule(new TimerTask() {
public void run() {
// Your action here
}
}, cal.getTime());
答案 3 :(得分:0)
您可以使用@Emil建议的Timer Task,这仅适用于x分钟或数小时后退出的简单场景。
如果您需要更高级的计划,最好使用Quartz。使用Quartz,您可以提供一年中一个月的具体日期。基本上您可以想象的任何可能的时间组合都可以使用quartz配置。