2014-04-10 1 views
5

Vorrei indicare un processo di caricamento con l'indicatore di progresso JavaFX. Il problema è che l'indicatore non ruota quando il codice viene eseguito la prima volta. La seconda volta che ruota significa che i collegamenti funzionano, sia la disabilitazione che la proprietà visibile.Thread JavaFX con indicatore di progressione non in rotazione, lavoro svolto in non FXThread

Anche io cambio lo stato nel thread FX e faccio il lavoro su un thread separato in modo che io possa non vedere alcun errore qui.

Qualcuno vede il problema?

Controller:

Fxml:

<ScrollPane fitToHeight="true" fitToWidth="true" prefHeight="600.0" 
    prefWidth="500.0" xmlns="http://javafx.com/javafx/8" 
    xmlns:fx="http://javafx.com  
    /fxml/1"> 
    <content> 
     <StackPane> 
      <children> 
       <VBox fx:id="parentToDisable"> 
        <!-- shortened --> 
        <Button fx:id="btnSave" mnemonicParsing="false" onAction="#onSave" 
         text="Speichern" /> 
        <!-- shortened --> 
       </VBox> 
       <ProgressIndicator fx:id="loadingIndicator" 
        maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" 
        minWidth="-Infinity" prefHeight="60.0" prefWidth="60.0" 
        visible="false" /> 
      </children> 
     </StackPane> 
    </content> 
</ScrollPane> 

risposta

4

Che assomiglia a un insetto: RT-33261. Sembra essere stato risolto nell'ultima pre-release di JDK 8u20.

La mia ipotesi è che l'indicatore di avanzamento non sia visibile quando il grafico della scena viene creato per la prima volta. Per risolvere il problema, rimuovere l'attributo visible="false" dal ProgressIndicator nel file fxml, e avvolgere il legame in una chiamata Platform.runLater(...):

public void initialize(...) { 
    Platform.runLater(() -> loadingIndicator.visibleProperty().bind(isSaving)); 
} 
+0

di avvolgerla in un 'Platform.runLater (());' chiamata aiutato. Grazie. - user48569 36 secondi fa modifica – simonides