이 질문은 내가 질문 한 것과 다소 관련이 있습니다 HERE. 이제 메인 메서드와 모든 스윙 구성 요소로 구성된 "Controller"클래스가 있습니다. "고도"라는 이름의 변수로 구성된 "VTOL"이라는 클래스가 있습니다 (현재이 변수를 volatile로 선언했습니다).다른 스레드를 통해 변수에 액세스하고 구성 요소를 스윙
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();
}
}
}
}
첫째, 나는 "고도"의 업데이트 값을 couldnt한다이었다 처음 직면 한 문제는 그것이 실행에 걸쳐 0 남아 : 여기
는 백그라운드에서 실행되는 스레드로 구성된 클래스 프로그램의. 그래서 나는 그것을 휘발성으로 선언했다. (그 좋은 습관인지는 모르겠다.)둘째, "lblAltitude"라는 컨트롤러 클래스에 jLabel이있다.이 스레드에서 변경된 값으로 업데이트하려고하지만, 어떻게 든 일어나지 않아. 어떻게 할 수 있습니까?
'VTOL.altitude'를 전혀 변경하지 않았습니다. 'double'에 복사 한 후'0.01'을 뺀 다음 다시 int 형으로 캐스팅 한 뒤 다시 복사합니다. 'VTOL.altitude'는 캐스트가 소수 부분을 제거하기 때문에 변경되지 않습니다. '-0.01'. 'VTOL.altitude'는 두 배입니까? 그렇지 않다면 그렇게 할 수도 있습니다. 확실히 'int'로 캐스트를 제거해야합니다. – OldCurmudgeon
실제로 VTOL.altitude는 int입니다. 내 목표는 vtol을 0.01 배 줄이는 것입니다. 나는 그것이 완전히 내려 오기를 원하지 않는다. 그래서 나는 그것을했다. – md1hunox
그런 경우에는 'alt - = alt * 0'과 같은 것이 필요합니다.01' 안 그래? 만약 당신이 정말로 * * 요인에 의한 감소를 의미합니다. BTW - 0에서 시작하면 여전히이 편집으로 변경되지 않습니다. – OldCurmudgeon