Как выйти из Java-программы в определенное время - PullRequest
1 голос
/ 03 августа 2011

У меня есть приложение для прослушивания JMS, а класс QueueReceive реализует функцию MessageListener.the, как показано ниже:

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 ]

3 голосов
/ 03 августа 2011

Вы можете использовать TimerTask [ Пример кода ] для этой цели.

Пример:

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 голос
/ 03 августа 2011

Используйте 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());
1 голос
/ 03 августа 2011

Если говорить о JMS, то класс, реализующий MessageListener, будет иметь метод onMessage, который будет вызываться при поступлении любого сообщения в очередь. Вы можете реализовать этот метод так, чтобы он мог проверять входящее сообщение и вызывать метод quit() при определенных условиях.

Я думаю, нам здесь не нужен цикл while для постоянной проверки выхода из QueueReceive.

0 голосов
/ 03 августа 2011

Вы можете использовать Timer Task, как предложено @Emil, это полезно только для простых сценариев, таких как выход через x минут или часов.

, если вам нужно более продвинутое планирование, лучше использовать Quartz .Используя Кварц, вы можете указать конкретную дату месяца года. В принципе, любая возможная комбинация времен, которую вы можете себе представить, может быть настроена с помощью кварца.

...