2012-05-21 3 views
0

많은 작업 (GUI 업데이트)을 일괄 처리하고 매초마다 실행하고 싶습니다. (I 업데이트 수백 두 번째가 그 자바 FX 2가 동결 원인)Executor로 작업 일괄 처리하기

public void update(String price){ 
     Platform.runLater(new Runnable(){ 
      @Override 
      public void run() { 
       priceLabel.setText(price); 

      }}); 
    } 

무슨 자바에서이 일을하는 가장 쉬운 방법은?

답변

2

일반적으로 GUI에 대한 모든 업데이트는 함께 일괄 처리되며 GUI 스레드에서 처리됩니다. 나는 당신의 건축이 당신의 진짜 문제라고 생각합니다. 10ms마다 레이블을 변경하는 것이 현명하지 않습니다. Java FX가 이것을 지원한다고해도 사용자가 볼 수있는 유일한 것은 깜박입니다. 따라서 내부 데이터 모델을 업데이트하고 특정 시간 속도로 사용자가 볼 수있는 데이터 모델을 변경하는 것이 좋습니다. 데이터 모델은 UI와 독립적이며 배경 스레드는 단일 업데이트를 매 2 초마다 UI에 제출할 수 있습니다.

0

변경 사항은 무엇이 트리거됩니까? 텍스트가 일부 오브젝트의 값에 링크 된 경우 you could use binding 오브젝트의 값이 변경 될 때 GUI의 자동 갱신을 얻으십시오.

또는 수동으로 시도 할 수 있습니다. 예를 들어 아래의 코드를 참조하십시오 (이는 간단합니다 - 두 번 실행하지 않도록 실행 파일을 실행할 때 목록을 지우는 것이 필요합니다 - 동시성 문제 등을 처리해야하는 경우).

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
final List<Runnable> list = new CopyOnWriteArrayList<Runnable>(); //your updates 
Runnable updateGui = new Runnable() { 

    @Override 
    public void run() { 
     Platform.runLater(new Runnable() { 

      @Override 
      public void run() { 
       for (Runnable r : list) { 
        r.run(); 
       } 
      } 
     }); 
    } 
}; 

scheduler.scheduleAtFixedRate(updateGui, 0, 1, TimeUnit.SECONDS); 

list.add(new Runnable() { 

    @Override 
    public void run() { 
     priceLabel.setText(price); 
    } 
}); 
관련 문제