Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javaFX中通过线程更新ProgressBar_Java_Javafx_Runnable - Fatal编程技术网

在javaFX中通过线程更新ProgressBar

在javaFX中通过线程更新ProgressBar,java,javafx,runnable,Java,Javafx,Runnable,我正在从事一个利用JavaFX的ProgressBar的Java项目。根据我在StackOverflow上的发现,通常需要添加一个线程,或者程序需要实现Runnable,以便动态更新ProgressBar的值,比如说当程序在for循环中运行时 然而,看看stackoverflow中的java文档和答案,我仍然不确定如何或者什么是解决我的问题的最佳方法 由于我对JavaFX一无所知,有人能给我一些提示吗 下面是项目中给出的Application.java 公共类MyApplication扩展应用程

我正在从事一个利用JavaFX的ProgressBar的Java项目。根据我在StackOverflow上的发现,通常需要添加一个线程,或者程序需要实现Runnable,以便动态更新ProgressBar的值,比如说当程序在for循环中运行时

然而,看看stackoverflow中的java文档和答案,我仍然不确定如何或者什么是解决我的问题的最佳方法

由于我对JavaFX一无所知,有人能给我一些提示吗

下面是项目中给出的Application.java

公共类MyApplication扩展应用程序{
私有静态最终字符串UI_FILE=“/UI.fxml”;
@凌驾
public void start(Stage)引发异常{
FXMLLoader=新的FXMLLoader();
setLocation(getClass().getResource(UI_文件));
VBox root=(VBox)loader.load();
场景=新场景(根);
舞台场景;
赛段名称(“T-03队:球场刮板”);
stage.show();
}
公共静态void main(字符串参数[]){
应用程序启动(args);
}
}
java,我应该实现相关的循环和方法

公共类控制器{
@FXML
私人ProgressBar ProgressBar;
@FXML
无效剂量测定法(){
for(字符串对象:objectList){
列表v=someOtherFunc(对象);
totalObjectCount+=v.size();
进度=(双精度)+objectCount/v.size();
progressbar.setProgress(进度);
}
}
}
使用, 并在新的
线程中运行它。
任务
有自己的进度属性,还有一个
updateProgress
方法,确保在FX应用程序线程上执行对进度的更改。然后可以将进度条的进度绑定到任务的:

@FXML
无效剂量测定法(){
任务=新任务(){
@凌驾
公开作废通知(){
for(字符串对象:objectList){
列表v=someOtherFunc(对象);
totalObjectCount+=v.size();
updateProgress(++objectCount,objectList.size());
}
返回null;
}
}
progressBar.progressProperty().bind(task.progressProperty());
新线程(任务).start();
}

谢谢你,詹姆斯!这个代码有效!但是,当我启动UI时,看到进度条从左到右(就像加载一样)摆动是正常的吗?@edwardlam0328我想这是因为你对进度的计算是错误的。不,我的意思是当程序还没有调用doSomething方法时。该栏的行为类似于Windows XP中的启动屏幕。@edwardlam0328哦,是的;进度条最初处于“未确定”进度状态。如果希望它开始为空,只需使用
progress=0对其进行初始化即可。既然我对JavaFX一无所知,那就继续学习吧,通常的做法是通过学习教程。。