2013-06-08 3 views
3

내가 가진이 작동 코드로 작동하지 않습니다타임 라인은 '일부'기간이

Duration duration = Duration.millis(1000/30.0); 
videoTick = new Timeline(new KeyFrame(duration, new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent actionEvent) { 
      System.out.println("tick"); 
     } 
    })); 
videoTick.setCycleCount(Animation.INDEFINITE); 
videoTick.playFromStart(); 

을 완벽하게. 그러나 일단 약간의 시간을 변경하면 :

Duration duration = Duration.millis(1000/30.1); 

더 이상 작동하지 않습니다! 제 정신이 아니거나 JavaFx가 완전히 고장 났습니까? 어떻게 해결할 수 있을까요?

편집 :이 버그는 아무 의미가없는 것처럼 보이지만 방금 내 앞에 일어났습니다. 그것을 재현 할 수있는 최소한의 코드를 제공했습니다.

import javafx.animation.*; 
import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.util.Duration; 
import javafx.stage.Stage; 

public class Ticker extends Application { 
    private Timeline videoTick; 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(final Stage primaryStage) { 
     Duration duration = Duration.millis(1000/30.0); 
     videoTick = new Timeline(new KeyFrame(duration, new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent actionEvent) { 
       System.out.println("Tick"); 
      } 
     })); 
     videoTick.setCycleCount(Animation.INDEFINITE); 
     videoTick.playFromStart(); 
    } 
} 

그런 다음 30.0 30.1에 변경합니다.

편집 2 : 좋아, 여기에 (부분) 해결 방법은 다음과 같습니다 Timeline#play() 작품 Timeline#playFromStart()하지 않습니다. (EDIT 4 :.. 죄송합니다, 이것은 분명 내가 너무 피곤 해요 작동하지 않습니다) : 정말 playFromStart을 무엇을해야하는 경우

그러나 문제가 해결되지 않는 이유는 무엇입니까? 더 중요한 것은 1000/30.1과 함께 작동하지 않는 이유는 무엇입니까?

EDIT 3는 :

나는 + 자바/자바 FX 1.7.0_17 자바/자바 FX 1.7.0_21 OSX 10.8에 재현.

+1

무엇이 작동하지 않습니까? 예외 또는 오류가 발생 했습니까? – Vulcan

+0

이전 코드에서 Java는 "tick", "tick", "tick"...을 나중에 인쇄하지만 아무 일도 일어나지 않습니다. –

+0

@jewelsea 7b17을 사용하고 있습니다. 업그레이드하고 테스트 해 보겠습니다. –

답변

1

자바 7 버그

은 내가이 문제를 추적하기 위해 자바 FX 이슈 트래커에서 RT-31027을 만들어 자바 7에서 자바 FX 버그입니다.

Java 1.7.0_21, OSX 10.8을 사용하여 명령 줄에서 컴파일하고 실행할 때 재현 할 수있었습니다 (틱 출력 없음).

죄송합니다. Java 1.7.0_21에서 작동하고 있다는 잘못된보고가있었습니다. (IDE에서 설정이 변경되었습니다.)

그것은이 작업 (틱이 출력됩니다) Java8b92에서 버그가 나타납니다 있도록 구축 이후의 자바 FX에서 수정 된 것으로 않습니다 자바 8

에서 수정. Java 8 early access builds are available. 해결 방법으로, 당신은 매우 자주 발생 애니메이션의 이러한 종류, 자바 8.

대체 구현

을 사용할 수 있도록, 당신은 또한 대신 AnimationTimer를 사용하여 고려할 수 있습니다. 8.0 고정으로

업데이트가

RT-31027, 나는이를 추적하기 위해 만든 이슈 트래커 기록, 주석과 폐쇄했다 "오직 중요한 수정 때문에이 같은 고정 폐쇄, 2.2로 백 포트되어있다".

+0

내가 버그 일 가능성이 가장 큰 것에 동의하는 한, 버그라고 주장하는 사실이 확실한 확실한 증거가없는 버그를 upvoting하는 것에 지쳤습니다. 내 의견으로는 내부 코드 또는 이전 버그 보고서를 참조하면 버그의 유효성을 선언하는 것으로 충분합니다. – Vulcan

+0

괜찮아요 벌컨, 투표가 필요 없어요. 관련 코드가 Java 8의 오픈 소스 일 뿐이므로 내부 코드를 참조 할 수있는 방법이 없습니다. 닫힌 소스 코드에 대한 많은 버그 보고서는 공개되지 않으므로 참조 할 수 없습니다. 이 문제를 추적하기 위해 JavaFX 문제 추적기에서 [RT-31027] (https://javafx-jira.kenai.com/browse/RT-31027)을 만들었습니다. – jewelsea