title: How i update javafx label with downloading
body: <p>I am developing a download manager.I can not update label. I am trying to update label with downloading in <code>run()</code> method but exception occurred. How I update Label.Where I write code of updating label and ProgressBar.</p>
  
  <pre><code>import javafx.application.*;
  import javafx.stage.*;
  import javafx.scene.*;
  import javafx.scene.control.*;
  import javafx.scene.layout.*;
  import javafx.geometry.*;
  import javafx.scene.effect.*;
  import javafx.scene.paint.*;
  import javafx.event.*;
  import javafx.scene.image.*;
  import java.util.*;
  import java.io.*;
  import java.net.*;
  import java.util.*;
  import java.io.*;
  import java.net.*;
  public class DownloadFile implements Runnable
  {   
  Thread thread;
  private static final int BUFFER_SIZE=1024;
  public final int DOWNLOADING=0;
  public final int PAUSED=1;
  public final int COMPLETE=2;
  public final int CANCELLED=3;
  public final int ERROR=4;
  private URL url;
  private int size;
  private int downloaded;
  private int status;
  static int check=0;
  Stage dStage;
  Label fileNameLabel;
  Label fileNameValueLabel; 
  Label statusLabel; 
  Label statusValueLabel; 
  Label fileSizeLabel; 
  Label fileSizeValueLabel; 
  Label downloadedLabel; 
  Label downloadedValueLabel; 
  Label speedLabel;   
  Label speedValueLabel; 
  Label timeRemainingLabel; 
  Label timeRemainingValueLabel;
  ProgressBar downloadingProgressBar;
  public void startStage()
  {
      dStage=new Stage();
      dStage.setResizable(false);
      dStage.getIcons().add(new Image("images\\webdownloadmanager.png"));
      dStage.setTitle("Friends Download Manager");
      BorderPane root=new BorderPane();
      root.setPadding(new Insets(10, 10, 10, 10));
      Scene dScene=new Scene(root,520,250);
      dStage.setScene(dScene);
      Label titleLabel=new Label("  Download Status   ");
      titleLabel.setStyle("-fx-background-color:#FFFFFF;");
      GridPane gpCenter=new GridPane();
      gpCenter.setPadding(new Insets(10, 10, 10, 10));
      gpCenter.setStyle("-fx-background-color:#FFFFFF;");
      fileNameLabel =new Label("File Name");
      fileNameValueLabel=new Label();
      statusLabel =new Label("Status");
      statusValueLabel =new Label();
      fileSizeLabel =new Label("File size");
      fileSizeValueLabel =new Label();
      downloadedLabel =new Label("Downloaded");
      downloadedValueLabel =new Label();
      speedLabel =new Label("Speed");
      speedValueLabel =new Label();
      timeRemainingLabel =new Label("Time Remaining    ");
      timeRemainingValueLabel =new Label();
      gpCenter.add(fileNameLabel,0,0);
      gpCenter.add(fileNameValueLabel,2,0);
      gpCenter.add(statusLabel ,0,3);
      gpCenter.add(statusValueLabel ,2,3);
      gpCenter.add(fileSizeLabel ,0,4);
      gpCenter.add(fileSizeValueLabel ,2,4);
      gpCenter.add(downloadedLabel ,0,5);
      gpCenter.add(downloadedValueLabel ,2,5);
      gpCenter.add(speedLabel ,0,6);
      gpCenter.add(speedValueLabel ,2,6);
      gpCenter.add(timeRemainingLabel ,0,7);
      gpCenter.add(timeRemainingValueLabel ,2,7);
      AnchorPane anchorPaneBottom=new AnchorPane();
      VBox vb=new VBox();
      HBox progressBarHB=new HBox();
      progressBarHB.setPadding(new Insets(10, 0, 30, 0));
      downloadingProgressBar=new ProgressBar();
      downloadingProgressBar.prefWidthProperty().bind(root.widthProperty().subtract(20));
      progressBarHB.getChildren().add(downloadingProgressBar);
      vb.getChildren().addAll(progressBarHB); 
      HBox labelHB=new HBox();
      Label message=new Label("Whould you like to perform ?");
      labelHB.getChildren().add(message);
      HBox buttonHB=new HBox();
      buttonHB.setSpacing(20);
      Button startPauseButton=new Button("Start");
      startPauseButton.setPrefWidth(80);
      Button cancelButton=new Button("Cancel");
      cancelButton.setPrefWidth(80);
      buttonHB.getChildren().addAll(startPauseButton,cancelButton);
      anchorPaneBottom.getChildren().addAll(vb,labelHB,buttonHB);
      AnchorPane.setTopAnchor(buttonHB, 40.0);
          AnchorPane.setRightAnchor(buttonHB,30.0);
      AnchorPane.setLeftAnchor(labelHB,40.0);
      AnchorPane.setTopAnchor(labelHB,40.0);
          AnchorPane.setTopAnchor(vb, 0.0);
      root.setTop(titleLabel);
      root.setCenter(gpCenter);
      root.setBottom(anchorPaneBottom);
      dStage.show();
      dStage.setOnCloseRequest(new EventHandler&lt;WindowEvent&gt;()
      {  
          public void handle(WindowEvent we)
          {   /*
              if(WebDownloadManager.check==0)
                  Platform.exit();
              else
                  check--;
              */
          }
      });     
  }   
  public DownloadFile(URL url)
  {
      this.url=url;
      size=-1;
      downloaded=0;
      status=DOWNLOADING;
      startStage();
      fileNameValueLabel.setText(getFileName(url).toString());
      statusValueLabel.setText("Waiting..");
      fileSizeValueLabel.setText(getSize()+"");
      downloadedValueLabel.setText("0.00 MB ("+getProgress()+" %)");
      speedValueLabel.setText("450.123 KB/sec");
      timeRemainingValueLabel.setText("1 hr ");
      download(); 
  }
  public String getUrl()
  {
      return url.toString();
  }
  public int getSize()
  {
      return size;
  }
  public float getProgress()
  {
      float tf=(downloaded/size)*100;
      return tf;
  
  }
  public int getStatus()
  {
      return status;
  }
  public void pause()
  {
      status=PAUSED;
  }
  public void resume()
  {
      status=DOWNLOADING;
      download();
  }
  public void cancel()
  {
      status=CANCELLED;
  }
  private void error()
  {
      status=ERROR;
  }
  private void download()
  {
      thread=new Thread(this);
      thread.start();
  }
  private String getFileName(URL url)
  {
      String fileName=url.getFile();
      String str=fileName.substring(fileName.lastIndexOf('/')+1).replace("%20"," ");
      return str;
  }
  public void run()
  {
  
      RandomAccessFile file=null;
      InputStream stream=null;
      try
      {
          HttpURLConnection conn=(HttpURLConnection)url.openConnection();
          conn.setRequestProperty("Range","bytes="+downloaded+"-");
          conn.connect();
          if(conn.getResponseCode()/100!=2)
          {
              error();
          }
          int contentLength=conn.getContentLength();
          if(contentLength&lt;1)
          {
              error();
          }
          if(size==-1)
          {
              size=contentLength;
          }
  
          file=new RandomAccessFile(getFileName(url),"rw");
          file.seek(downloaded);
          stream=conn.getInputStream();
          while(status==DOWNLOADING)
          {
              statusValueLabel.setText("Running..");
              byte buffer[];
              if(size-downloaded&gt;BUFFER_SIZE)
              {
                  buffer=new byte[BUFFER_SIZE];
              }
              else
              {
                  buffer=new byte[size-downloaded];
              }
              int read=stream.read(buffer);
              if(read== -1)
              {
                  break;
              }
              file.write(buffer,0,read);
              downloaded+=read;
  
          }
          if(status==DOWNLOADING)
          {
              status=COMPLETE;
          }
      }
      catch(Exception exp)
      {
          error();
          System.out.println("Error :"+exp);
      }
      finally
      {
          if(file!=null)
          {
              try
              {
                  file.close();
              }
              catch(Exception e)
              {
  
              }
          }
          if(stream!=null)
          {
              try
              {
                  stream.close();
              }
              catch(Exception exp)
              {
  
              }
          }
      }
  }
  </code></pre>
  
  <p>}</p>