2014-10-01 2 views
1

제목이 잘못되었지만 처음부터 응용 프로그램에 대한 데이터와 통계를 수집하려고합니다. JavaFX를 사용하고 있으며 모든 데이터 및 처리를 처리 할 모델 클래스가 있습니다.앱 시작에서 고정 간격 스레드를 실행하는 방법은 무엇입니까?

내가 원하는 것은 모델 클래스가 (런타임, 스레드 수, mem 사용량과 같은) 데이터 수집을 시작하는 것입니다. 앱이 시작되는 순간부터입니다. 하지만 매 초마다이 값을 계속 업데이트해야하기 때문에 일종의 ScheduledExecutorThread 또는 다른 무언가를 실행해야합니다.

이 프로그램의 맨 처음부터 모델 클래스가 매초 "update()"함수를 실행하도록 어떻게 할 수 있습니까?

+0

@G Boggs [this] (http://stackoverflow.com/questions/16128423/how-to-update-the-label-box-every-2-seconds-in-java-fx/ 16138351 # 16138351). – Chris

+0

@Chris 나는 이것이 내가하고 싶은 것을 완전히 확신하지 못한다. 수업 시작부터 데이터 수집을 시작하겠습니다. 우선, 어떻게해야합니까? 둘째, 나는 함수를 호출하고 싶지 않습니다. 스레드를 본질적으로 시작하기를 원합니다. –

답변

1

Java에서 고정 간격 opetation을 수행 할 때마다 ScheduledExecutorService을 조사해야합니다. 귀하의 경우에는, 뭔가 같은 : 시스템이 클래스가로드되는 순간을 시작

private static final ScheduledExecutorService SERVICE = Executors.newScheduledThreadPool(1, 
    new ThreadFactory() { 
     public Thread newThread(Runnable r) { 
      Thread t = new Thread("Tick Thread", r); 
      t.setDaemon(true); 
      return t; 
     } 
    }); 

private static final AtomicReference<Controller> CONTROLLER = new AtomicReference<>(); 

public static final void setController(Controller c) { 
    CONTROLLER.compareAndSet(null, c); 
} 

static { 

    Runnable task = new Runnable() { 
     public void run() { 
      //do something each second.... 
      // call the 'update()' method: 
      Controller c = CONTROLLER.get(); 
      if (c != null) { 
       c.update(); 
      } 
     } 
    } 

    // delay 1 second, repeat each second. 
    service.scheduleAtFixedRate(task, 1, 1, TimeUnit.SECONDS); 
} 

당신은 그것을 가지고 가고, 클래스의 정적 초기화에 넣어, 당신은 얻을 것이다 할 수

.... 당신은 가능성이 것입니다 ExecutorService의 스레드를 데몬 thead로 바꾸려면 ..... 사용자 지정 스레드 팩터 리가 필요합니다. .....

위 코드는 즉시 시작되고 컨트롤러가있을 경우 컨트롤러를 업데이트합니다 .

c 컨트롤러를 만드는 순간 정적 메서드를 사용하여 값을 설정할 수 있습니다.

+0

내가 생각하고 있던 것이 좋습니다. 그러나 제 문제는 모든 데이터 수집이 이루어지는 모델 클래스가 있다는 것입니다. 이 클래스가 프로그램을 시작한 순간부터 데이터 수집을 시작하려면 어떻게해야합니까? 또한 어떻게 SeS를 자체적으로 시작할 수 있습니까? –

+1

좀 더 자세하게 업데이트하겠습니다 .... 'update()'메서드는 정적 메서드입니까? – rolfl

+0

그게 아니고 모델이 희망적으로 액세스 할 수있는 컨트롤러 클래스의 일부분입니다 –

관련 문제