如何在特定时间退出java程序

时间:2011-08-03 08:55:04

标签: java jms quit

我有一个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消息?

4 个答案:

答案 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配置。