Java-计时器中的全局变量

时间:2018-10-23 21:25:06

标签: java timer

首先,我的母亲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

如果我将其定稿,则无法修改。我该怎么办?

预先感谢

1 个答案:

答案 0 :(得分:0)

您可以尝试将声明行移到main方法之外,使它们成为类中的静态字段

static double T1 = 0, T2 = 0, T3 = 0, T4 = 0;
public static void main(String args[]) {  
.....

请注意,您正在使用多个计时器,每个计时器都有其自己的线程,这意味着如果您在多个任务中使用T1(或T2等),则可能会出现并发问题...