2014-03-18 4 views
-1

내가 간단한, 시간 초과 (더 또는 덜) 무한 루프가하는 데 사용 : 그것은 모두 완료 될 때까지타임 라인 무한히 실행되고 있지 않습니다 (자바 FX)

while (!canrun) { 
    do_stuff(); //simple calculation 
    update_gui(); //updates some labels 
    Thread.sleep(waittime); 
} 

어느 자연스럽게 자바 FX-응용 프로그램을 동결 계산 (canrun은 false로 설정 됨).

내가 타임 라인으로 교체 :

event = new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent actionEvent) { 
      do_stuff(); 
      update_gui(); 
     } 
    }; 
    keyframe = new KeyFrame(Duration.millis(waittime), event); 
    timeline = new Timeline(Timeline.INDEFINITE, keyframe); 

do_stuff을 (를) 다음과 같습니다

public void do_stuff() { 
    do_the_actual_stuff(); 
    if (stuff_finished) timeline.stop(); 
} 

(있는 waittime 여기에 1 1000 (밀리 초 사이의 숫자)입니다). Buttonclick에서 timeline.play()로 시작하고 do_stuff()에서 timeline.stop()으로 계산이 끝나면 중지합니다.

나는 또한 (가 실행될 경우에도)에있는 waittime 변경하는 기능이 있습니다

public void changewaittime() { 

    if (!(timeline.getStatus() == Animation.Status.RUNNING)) { 
     keyframe = new KeyFrame(Duration.millis(waittime), event); 
     timeline = new Timeline(Timeline.INDEFINITE, keyframe); 
    } else { 
     timeline.stop(); 
     keyframe = new KeyFrame(Duration.millis(waittime), event); 
     timeline = new Timeline(Timeline.INDEFINITE, keyframe); 
     timeline.play(); 
    } 
} 

그리고 지금 내 문제는, 타임 라인은 지속적으로 한 번 실행하고 있지 않습니다, 심지어는 do_stuff 입력하지 않습니다()를 다시 호출해야만 timeline.play()가 다시 호출됩니다. timeline.setCycleCount (Timeline.INDEFINITE)를 직접 호출해도 도움이되지 않습니다.

내가 놓친 것 없나요?

편집 : 내 실수를 찾을 수 없어 전체 GUI를 다시 작성했지만 현재 작동 중입니다.

답변

-2

전체 GUI 및 타임 라인을 다시 작성하여 문제를 해결했습니다. 왜 이전에 작동하지 않았는지 모르겠지만 지금은 작동 중입니다.