доступ к переменным и компонентам качания через разные потоки

Этот вопрос несколько связан с тем, который я задал ЗДЕСЬ. Теперь у меня есть класс «Контроллер», который состоит из основного метода и всех компонентов качания. есть класс с именем «VTOL», который состоит из переменной с именем «высота» (на данный момент я объявил эту переменную изменчивой).

вот класс, состоящий из потока, работающего в фоновом режиме:

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Vineet
 */
public class Gravity extends Thread {

    String altStr;
    double alt;
    Controller ctrl = new Controller();

    @Override
    public void run() {
        while (true) {
            alt=VTOL.altitude;
            System.out.println(alt);
            alt = alt-0.01;
            VTOL.altitude= (int) alt;
            altStr=new Integer(VTOL.altitude).toString();
            ctrl.lblAltitude.setText(altStr);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

Во-первых, проблема, с которой я столкнулся изначально, заключалась в том, что я не мог обновить значение «высоты», оно оставалось равным 0 на протяжении всего выполнения программы. Поэтому я объявил его как volatile (я не знаю, является ли это хорошей практикой)

Во-вторых, в классе контроллера есть jLabel с именем «lblAltitude», я хочу обновить его значение, так как оно было изменено в этом потоке, но почему-то это не так. происходит. Как мне это сделать?

5
задан Community 23 May 2017 в 10:34
поделиться