如何通过下载更新javafx标签

如何通过下载更新javafx标签,java,javafx,Java,Javafx,我正在开发下载管理器。我无法更新标签。我试图在run()方法中下载更新标签,但出现异常。如何更新标签。在这里我编写更新标签和进度条的代码 import javafx.application.*; import javafx.stage.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.geometry.*; import javafx.scene

我正在开发下载管理器。我无法更新标签。我试图在
run()
方法中下载更新标签,但出现异常。如何更新标签。在这里我编写更新标签和进度条的代码

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<WindowEvent>()
    {  
        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<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>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)
            {

            }
        }
    }
}
导入javafx.application.*;
导入javafx.stage.*;
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.layout.*;
导入javafx.geometry.*;
导入javafx.scene.effect.*;
导入javafx.scene.paint.*;
导入javafx.event.*;
导入javafx.scene.image.*;
导入java.util.*;
导入java.io.*;
导入java.net。*;
导入java.util.*;
导入java.io.*;
导入java.net。*;
公共类DownloadFile实现可运行
{   
螺纹;
私有静态最终整数缓冲区大小=1024;
公共最终整数下载=0;
公共最终int=1;
公共最终完整整数=2;
公共最终int=3;
公共最终整数错误=4;
私有URL;
私有整数大小;
下载私人互联网;
私人身份;
静态整数检查=0;
阶段性阶段;
标签文件名标签;
标签fileNameValueLabel;
标签状态标签;
标签状态值标签;
标签文件标签;
标签文件大小值标签;
标签下载标签;
标签下载值标签;
标签速度标签;
标签速度值标签;
标签时间剩余标签;
标签时间剩余值标签;
ProgressBar下载ProgressBar;
公开作废startStage()
{
d阶段=新阶段();
dStage.setresizeable(false);
添加(新图像(“images\\webdownloadmanager.png”);
setTitle(“朋友下载管理器”);
BorderPane根=新的BorderPane();
根。设置填充(新插入(10,10,10,10));
场景dScene=新场景(根,520250);
dStage.setScene(dScene);
标签标题标签=新标签(“下载状态”);
titleLabel.setStyle(“-fx背景色:#FFFFFF;”);
GridPane gpCenter=新建GridPane();
gpCenter.setPadding(新的插图(10,10,10,10));
gpCenter.setStyle(“-fx背景色:#FFFFFF;”);
fileNameLabel=新标签(“文件名”);
fileNameValueLabel=新标签();
statusLabel=新标签(“状态”);
statusValueLabel=新标签();
fileSizeLabel=新标签(“文件大小”);
fileSizeValueLabel=新标签();
downloadedLabel=新标签(“下载”);
downloadedValueLabel=新标签();
speedLabel=新标签(“速度”);
speedValueLabel=新标签();
timeRemainingLabel=新标签(“剩余时间”);
timeRemainingValueLabel=新标签();
gpCenter.add(filenamelab,0,0);
gpCenter.add(fileNameValueLabel,2,0);
gpCenter.add(statusLabel,0,3);
gpCenter.add(statusValueLabel,2,3);
gpCenter.add(fileSizeLabel,0,4);
添加(fileSizeValueLabel,2,4);
gpCenter.add(下载标签,0,5);
gpCenter.add(下载的ValueLabel,2,5);
gpCenter.add(speedLabel,0,6);
gpCenter.add(speedValueLabel,2,6);
gpCenter.add(timeRemainingLabel,0,7);
gpCenter.add(timeRemainingValueLabel,2,7);
AnchorPane AnchorpaneBooth=新的AnchorPane();
VBox vb=新的VBox();
HBox progressBarHB=新的HBox();
设置填充(新的插图(10,0,30,0));
downloadingProgressBar=新建ProgressBar();
下载ProgressBar.prefWidthProperty().bind(root.widthProperty().subtract(20));
progressBarHB.getChildren().add(下载ProgressBar);
vb.getChildren().addAll(progressBarHB);
HBox labelHB=新的HBox();
标签消息=新标签(“您想执行什么任务?”);
labelHB.getChildren().add(消息);
HBox按钮HB=新的HBox();
按钮b.设置间隔(20);
按钮开始按钮使用按钮=新按钮(“开始”);
startPauseButton.setPrefWidth(80);
按钮取消按钮=新按钮(“取消”);
取消按钮。设置预宽(80);
buttonHB.getChildren().addAll(开始使用按钮,取消按钮);
AnchorPaneBooth.getChildren().addAll(vb、labelHB、buttonHB);
AnchorPane.setTopAnchor(按钮B,40.0);
AnchorPane.setRightAnchor(按钮B,30.0);
AnchorPane.setLeftAnchor(labelHB,40.0);
AnchorPane.setTopAnchor(labelHB,40.0);
AnchorPane.setTopAnchor(vb,0.0);
根.设顶(标题标签);
root.setCenter(gpCenter);
根立根(锚板底);
dStage.show();
setOnCloseRequest(新的EventHandler()
{  
公共无效句柄(WindowEvent we)
{   /*
如果(WebDownloadManager.check==0)
Platform.exit();
其他的
检查--;
*/
}
});     
}   
公共下载文件(URL)
{
this.url=url;
大小=-1;
下载=0;
状态=下载;
startStage();
fileNameValueLabel.setText(getFileName(url.toString());
statusValueLabel.setText(“等待…”);
fileSizeValueLabel.setText(getSize()+);
下载的ValueLabel.setText(“0.00MB(“+getProgress()+”%)”);
speedValueLabel.setText(“450.123 KB/秒”);
timeRemainingValueLabel.setText(“1小时”);
下载();
}
公共字符串getUrl()
{
返回url.toString();
}
公共int getSize()
{
返回大小;
}
公共进度()
{
浮动tf=(下载/大小)*100;
返回tf;
}
public int getStatus()
{
返回状态;
}
公共空间暂停()
{
状态=暂停;
}
公众简历()
{
状态=下载;
下载();
}
公开作废取消()
{
状态=已取消;
}
私有无效错误()
{
状态=错误;
}
私有void下载()
{
线程=新线程(此);
thread.start();
}
私有字符串getFileName(URL)
{
字符串文件名=url.getFile();
String str=fileName.substring(fileName.lastIndexOf('/')+1)。替换(“%20”,”);
返回str;
}
公开募捐
{
RandomAccessFile=null;
InputStream=null;
尝试
{
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestProperty(“范围”,“字节数=”+下载+“-”);
连接();
如果(连接getResponseCode()/100!=2)
{
错误();
}
int contentLength=conn.getContentLength();
  Platform.runLater(new Runnable(updateMethod());