1

私はJMSリスナーアプリを持っており、クラスQueueReceiveはMessageListener.main関数を次のように実装しています。

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

4 に答える 4

3

この目的のために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();
}
}
于 2011-08-03T09:01:06.393 に答える
1

JMSについて説明すると、実装MessageListenerするクラスにはメソッドがonMessageあり、メッセージがキューに入ると呼び出されます。このメソッドは、着信メッセージをチェックし、quit()特定の条件でメソッドを呼び出すことができるように実装できます。

を終了するかどうかを常にチェックするために、ここでwhileループは必要ないと思いますQueueReceive

于 2011-08-03T09:04:23.587 に答える
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());
于 2011-08-03T09:10:23.767 に答える
0

@Emilが提案したように、タイマータスクを使用できます。これは、x分または数時間後に終了するなどの単純なシナリオでのみ役立ちます。

より高度なスケジューリングが必要な場合は、Quartzを使用するのが最善です。クォーツを使用すると、1年の特定の月の日付を指定できます。基本的に、クォーツを使用して、想像できる任意の時間の組み合わせを構成できます。

于 2011-08-03T09:25:41.017 に答える