如何通过下载更新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());