Uma dúvida no JavaFX, que procurei em vários lugares e não achei uma resposta, suponhamos que fiz um botão para fazer o download de um arquivo, só que quero que mostre uma ProgressBar, que mostre o progresso desse Download, como eu faria para a ProgressBar pegar o progresso do Download ?
Bem… meio que não entendi.
O que estou precisando apenas é que a ProgressBar mostre o Progresso do Download quando executar esse método:
public void instalarJogo() throws IOException{
fundo.setEffect(new GaussianBlur());
URL urlneed = new URL("http://download1075.mediafire.com/2shateys88cg/fqgo71l6v4kzm4a/Underground+2.zip");
String basePath = new File("").getAbsolutePath();
File file = new File(new File("gamesFiles/underground2/Underground2.zip").getAbsolutePath());
FileUtils.copyURLToFile(urlneed, file);
Alert download = new Alert(Alert.AlertType.INFORMATION);
download.initStyle(StageStyle.UNIFIED);
download.setTitle("Download");
download.setHeaderText("Download Iniciado");
download.setContentText("Aguarde enquanto o jogo é baixado");
download.showAndWait();
fundo.setEffect(null);
}
Vc viu o link pelo menos? Fala exatamente disso. Totalmente explicado ainda.
Link que o cara da resposta correta CITA no tópico:
http://www.java2s.com/Code/Java/JavaFX/ProgressBarandBackgroundProcesses.htm
Fiz o que foi pedido lá, meu programa crasha ao clicar no Botão de Instalar.
package sample.ui;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.StageStyle;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class controllerDashboard implements Initializable {
@FXML
private ImageView fundo;
@FXML
private Button instalar;
@FXML
private Button fechar;
@FXML
private ProgressBar progressoDownload;
@FXML
public void initialize() {
String img = getClass().getResource("images/ug1.png").toExternalForm();
fundo.setImage(new Image(img));
String cam = this.getClass().getResource("css/interface.css").toExternalForm();
fundo.getStyleClass().add(cam);
instalar.getStylesheets().add(cam);
progressoDownload.setVisible(true);
progressoDownload.setStyle("-fx-accent:#cc2a49");
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
}
public void instalarJogo() throws IOException{
Task baixar;
fundo.setEffect(new GaussianBlur());
progressoDownload.setVisible(true);
progressoDownload.setProgress(0);
baixar = createWorker();
URL urlneed = new URL("http://download1075.mediafire.com/2shateys88cg/fqgo71l6v4kzm4a/Underground+2.zip");
String basePath = new File("").getAbsolutePath();
File file = new File(new File("gamesFiles/underground2/Underground2.zip").getAbsolutePath());
FileUtils.copyURLToFile(urlneed, file);
progressoDownload.progressProperty().unbind();
progressoDownload.progressProperty().bind(baixar.progressProperty());
new Thread(baixar).start();
Alert download = new Alert(Alert.AlertType.INFORMATION);
download.initStyle(StageStyle.UNIFIED);
download.setTitle("Download");
download.setHeaderText("Download Iniciado");
download.setContentText("Aguarde enquanto o jogo é baixado");
download.showAndWait();
fundo.setEffect(null);
}
public void passarMouse(){
instalar.setStyle("-fx-background-color: #1a5ab0");
}
public void saidaMouse(){
instalar.setStyle("-fx-background-color: #338AFF");
}
public void fecharPassarMouse(){
fechar.setStyle("-fx-background-color: #cc2a49");
}
public void fecharSaidaMouse(){
fechar.setStyle("-fx-background-color: transparent");
}
public void encerrar(){
System.exit(0);
}
public Task createWorker(){
return new Task(){
@Override
protected Object call() throws Exception {
for(int i =0; i<10;i++){
Thread.sleep(2000);
updateProgress(i + 1, 10);
}
return true;
}
};
}
}
Qual erro apresenta?
Não apresenta erro, o programa congela e aparece aquela mensagem que não está respondendo.
Vc fez a Thread? Se não fez, vai ficar congelado até o término do download. Nesse mesmo link tem um exemplo de uso.
public Task createWorker() {
return new Task() {
@Override
protected Object call() throws Exception {
for (int i = 0; i < 10; i++) {
Thread.sleep(2000);
updateMessage("2000 milliseconds");
updateProgress(i + 1, 10);
}
return true;
}
};
Eu havia colocado a Thread no local errado, tentei agora e funcionou. Muito obrigado pela ajuda.