2013-05-26 3 views
17

javafx를 사용하여 미리 결정되었지만 불규칙한 간격으로 화면에 상황을 표시하는 코드를 작성하려고합니다. 내가 (java.util, 아니 javax.swing) 타이머를 사용하려고했지만 당신은 별도의 스레드에서 일하는 경우 응용 프로그램에서 아무것도 변경할 수 없습니다. (타이머처럼) 아무도 내가 타이머를 얻을 수있는 방법을 말해 줄 수 둘 다 별도의 스레드 인 경우 응용 프로그램과 상호 작용합니까?타이머와 javafx

+1

[JavaFX에서 2 초마다 레이블을 업데이트하는 방법] (http://stackoverflow.com/questions/16128423/how-to-update-the-label-box-every-2-seconds-in-java)을 참조하십시오. -fx/16138351 # 16138351); 즉, [Platform.runLater] (http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater (java.lang.Runnable))를 사용하여 별도의 스레드에서 UI를 업데이트하거나 UI 스레드에서 모든 것을 유지하려면 [JavaFX 애니메이션 프레임 워크] (http://docs.oracle.com/javafx/2/api/javafx/animation/package-summary.html)를 참조하십시오. – jewelsea

답변

16

JavaFX 구성 요소를 건 드리려면 Platform 스레드 (JavaFX의 이벤트 발송 스레드)에서 수행해야합니다. Platform.runLater()을 호출하여 쉽게 수행 할 수 있습니다. 당신이

Timer timer = new java.util.Timer(); 

timer.schedule(new TimerTask() { 
    public void run() { 
     Platform.runLater(new Runnable() { 
      public void run() { 
       label.update(); 
       javafxcomponent.doSomething(); 
      } 
     }); 
    } 
}, delay, period); 
I이 사용

을 할 수 있도록

new Thread() { 
    public void run() { 
     //Do some stuff in another thread 
     Platform.runLater(new Runnable() { 
      public void run() { 
       label.update(); 
       javafxcomponent.doSomething(); 
      } 
     }); 
    } 
}.start(); 
17

berry120의 대답은 너무 java.util.Timer와 함께 작동하고 완벽하게

18
작동 : 그래서, 예를 들어,이 작업을 수행 할 수 있도록 완벽하게 안전

JavaFX 응용 프로그램 스레드에서 이후 작업을 예약하려면 java.util.Timer 또는 java.util.concurrent.ScheduledExecutorService이 필요하지 않습니다. 당신이 ReactFX에서 편리한 방법을 사용할 수 있습니다, 또는

new Timeline(new KeyFrame(
     Duration.millis(2500), 
     ae -> doSomething())) 
    .play(); 

: 당신은 타이머로 자바 FX 타임 라인을 사용할 수 있습니다, 당신은 Platform.runLater에 작업을 마무리 할 필요가 없습니다

FxTimer.runLater(
     Duration.ofMillis(2500), 
     () -> doSomething()); 

참고 그것 때문에 JavaFX 응용 프로그램 스레드에서 이미 실행되었습니다.

+0

ReactFX를 사용하는 경우 ReactFX의 타이머와 FxTimer를 일시 중지했다가 다시 시작 하시겠습니까? 나는 정기적으로 무언가를 저장하기 위해 그것을 사용하고있다. ReactFX에서 Timeline의 pause() 및 play()와 똑같은 pause() 및 play()가 있습니까? – mk7

관련 문제