EDIT: Ich sehe Fuerchau war schneller, dafür gibt's gleich ein Beispiel.

Laut API bieten ProgrammCalls kein Timeout.

Für den genauen Ratschlag müsste ich noch wisssen, ob du das Programm auf der AS/400 oder woanders läuft...

Unabhängig davon, aber die 2 Möglichkeiten:

1. via JDBC-Connection und CallableStatement. Dort gibt es ein Querytimeout. Um das Programm in eine StoredProcedure binden, suche im Forum.

2. einen Überwachungsthread starten

etwas so wie hier:
Code:
int waitSec = 900;
int killTime = 30;

Thread timeGuard = new Thread(new TimeGuard(waitSec+killTime, Thread.currentThread()));
try {
    this.log("*** Warte auf Arbeit .... ***");
    timeGuard.start();
    DQData = dq.read(waitSec);
} catch (InterruptedException e ) {
    this.log ( "TimeOut - Wiederanlauf in 2 Minunten" );
    .....
} finally {
    timeGuard.interrupt();
}
Hier die Klasse Timeguard:

Code:
   public class TimeGuard extends Thread  {
       
      private long waitTime;
      private Thread callThread;

      public TimeGuard (int waitTimeSec, Thread callThread) {
                    
          this.waitTime = waitTimeSec * 1000;
          this.callThread = callThread;
      }

      public void run() {
          try {
              Thread.sleep(waitTime);
              callThread.interrupt();   // Timeout, Caller unterbrechen

          } catch (InterruptedException e) {
              // Normalfall
          }
      }
   }
Einschränkung: Wenn man es ganz genau haben will, müsste man noch um ein Syncobject einbauen.

Ich hab schon irgendwo eine elegantere Lösung gesehen, lebe mit der aber auch ganz gut.

Falls es noch Fragen gibt nur zu.

Robert P.

PS. Wie man an diesem Beispiel sieht, läßt einen das Timeout der DataQueues auch im Stich, wenn der Listener am PC läuft und die AS/400 z.B. niederfährt --> ohne Timeout wartet der Listener dann ewig (auch wenn neue Einträge in die Dataqueue kommen würden)