首先,我的母亲languaje不是英语,所以对不起,如果我说错了话。
我正在尝试用2个队列(A和B)在Java中编写程序,每隔0.3秒放置objets,然后根据属性,将其他属性插入变量T1,T2,T3中或T4。 Rigth现在我只想将其放入T1内,但我不能。这是我现在的程序:
public static void main(String args[]) {
Queue<Camion> A = new LinkedList<>();
Queue<Camion> B = new LinkedList<>();
double T1 = 0, T2 = 0, T3 = 0, T4 = 0;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
int cont = 0;
@Override
public void run() {
if (cont == 3) {
timer.cancel();
}
Camion c = new Camion();
cont++;
if (A.size() <= B.size()) {
A.add(c);
} else {
B.add(c);
}
System.out.println(c.toString());
}
};
timer.schedule(task, 300, 300);
Timer timer2 = new Timer();
TimerTask task2 = new TimerTask() {
public void run() {
if (!A.isEmpty()) {
int T1 = A.poll().getPeso(); //if i don't create T1 i got the error
System.out.println(T1);
if (T1 <= 1500) {
try {
Thread.sleep(1700);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
Thread.sleep(2300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
timer2.schedule(task2, 10, 10);
Timer timer3 = new Timer();
TimerTask task3 = new TimerTask() {
@Override
public void run() {
if (!B.isEmpty()) {
int T1 = B.poll().getPeso();
System.out.println(T1);
if (T1 <= 1500) {
try {
Thread.sleep(1700);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
Thread.sleep(2300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
问题是我不能在计时器内使用T1,T2,T3和T4。我收到此错误:
Local variable T1 defined in an enclosing scope must be final or effectively final
如果我将其定稿,则无法修改。我该怎么办?
预先感谢
答案 0 :(得分:0)
您可以尝试将声明行移到main方法之外,使它们成为类中的静态字段
static double T1 = 0, T2 = 0, T3 = 0, T4 = 0;
public static void main(String args[]) {
.....
请注意,您正在使用多个计时器,每个计时器都有其自己的线程,这意味着如果您在多个任务中使用T1(或T2等),则可能会出现并发问题...