FIFO 큐에서 입력 (큐 대기열) 및 출력 (대기열에서 제거)을 관리하는 데 두 개의 타이머가 있지만 큐를 대기열에서 제외하는 예외가 계속 발생합니다. java.lang.IllegalStateException : 타이머가 이미 취소되었습니다. 나는 83 행의 오류가 발생했다고 주장하는 곳에서 디버그 라인을 멈출 수 없다. 나는 도움이되지 않을 정도로 내가 무엇을 놓쳤는 지 모른다.타이머가 이미 취소됨
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
/**
* RunSim
*/
public class RunSim {
private double arrivalRate = 600;
private double y;
private Timer t;
private Timer t2;
private Queue fifoQueue;
private long xy;
private long fact = 10;
private int count;
private int pId;
public RunSim() {
Random r = new Random();
long n = System.currentTimeMillis();
r.setSeed(n);
double i = r.nextDouble();
y = ((1/arrivalRate) * (Math.log(i)));
xy = (long) y;
t = new Timer();
t2 = new Timer();
fifoQueue = new Queue();
count = 0;
pId = 0;
}
public static void main() {
RunSim rs = new RunSim();
rs.start();
}
public void start() {
class sendPacket extends TimerTask {
public void run() {
Packet p = new Packet();
p.setId(pId);
fifoQueue.insert(p);
p.setArrivalTime();
System.out.println("ID: " + p.getId() + " Arrival Time: "
+ p.getArrivalTime()/fact);
pId++;
}
}
class removePacket extends TimerTask {
public void run() {
fifoQueue.first().setDepartureTime();
System.out.println("ID: " + fifoQueue.first().getId()
+ " Departure Time: "
+ fifoQueue.first().getDepartureTime()/fact);
fifoQueue.remove();
}
}
while (count < 1000) {
long v = fact * (1 + Math.abs(xy));
t.schedule(new sendPacket(), 0, v);
count++;
t2.schedule(new removePacket(), 5, 5);
}
}
}
그리고 예외의 전체 스택 추적은 ...? 그리고 83 호선은 ...? –
java.lang.IllegalStateException : 타이머가 이미 취소되었습니다. java.util.Timer.sched (Timer.java:354) java.util.Timer.schedule에서 \t (Timer.java:222) RunSim.start에서 \t (RunSim.java:83)에서 \t \t에서 RunSim.main (RunSim.java:47) 줄 83 : t2.schedule (새 removePacket(), 5,5); – Vhas