2014-01-12 6 views
0

javafx의 핸들 함수에서 일부 구성 요소 (레이블, ProgressBar, 버튼)를 업데이트해야합니다.JavaFX의 구성 요소 GUI 업데이트

대화 상자는 모달 대화 상자이며 일부 작업을 순차적으로 수행하는 데 사용됩니다.

@FXML public void updateHandle(ActionEvent action){ 

    buttonSend.setDisable(true); 

    /* Operation 1 */ 
    progressBar.setProgress(0.05); 
    label.setText("Init.."); 

    myInitFunction(); 
    myVar = new var(); //global 


    /* Op2 */ 
    progressBar.setProgress(0.10); 
    label.setText("Check connection.."); 

    myConnFunction(); 

    // .... 
    // .... 
} 

문제는 모든 내 기능이 올바르게 처리되지만 GUI의 요소는 변경되지 않는다는 것입니다.

편집

내가 Platform.runlater을 사용하려고하지만 작동하지 않는 것 같습니다 ...

void updateLabelLater(final Label label, final String text) { 
     Platform.runLater(new Runnable() { 
      @Override public void run() { 
      label.setGraphic(null); 
      label.setText(text); 
      } 
     }); 
    } 
void updateProgressBar(final ProgressBar progressBar, final double val){ 
    Platform.runLater(new Runnable() { 
      @Override public void run() { 
      progressBar.setProgress(val); 
      } 
     }); 
} 

답변

1

는 updateHandle는 이벤트 스레드에서 실행하고 있습니까? 툴링 문제 때문에 FXML에 신경 쓰지 않아서 많은 답변을 얻지 못했습니다. (하지만 잘하면 도움이됩니다.)

//Pseudo Code 
public doLongRuningOperation(final Object ... objects){ 
    final Thread longRunning = new Thread(){ 
    public void run(){ 
     update("this"); 
     sleep(1000); //Pause/do something etc... 
     update("should"); 
     sleep(1000); 
     update("update"); 
     System.err.println("completed"); 
    } 
    }; 
    longRunning.start(); //Start this process 
} 
//Rejoin the UI Thread and update it... 
public void update(final String text){ 
    //reference to label 'lbl' 
    Platform.runLater(new Runnable(){ 
    lbl.setText(text); 
    }); 
} 
관련 문제