Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
使用参数更新JavaFXProgressBar_Java_Multithreading_Javafx - Fatal编程技术网

使用参数更新JavaFXProgressBar

使用参数更新JavaFXProgressBar,java,multithreading,javafx,Java,Multithreading,Javafx,我的JavaFx应用程序上有一个Progressbar。我需要从另一个线程更新它。该线程必须提供progers值 我的代码如下所示 //任务类 public类UpdateProgressBarTask扩展任务{ 私人双重价值; 公共UpdateProgressBarTask(双值){ 这个.progressValue=value; } @凌驾 受保护的Void调用()引发异常{ this.updateProgress(this.progressValue,100); 返回null; } } /

我的JavaFx应用程序上有一个Progressbar。我需要从另一个线程更新它。该线程必须提供progers值

我的代码如下所示

//任务类

public类UpdateProgressBarTask扩展任务{
私人双重价值;
公共UpdateProgressBarTask(双值){
这个.progressValue=value;
}
@凌驾
受保护的Void调用()引发异常{
this.updateProgress(this.progressValue,100);
返回null;
}
}
//控制器

public void createProgerssTask(双倍值){
UpdateProgressBarTask任务=新的UpdateProgressBarTask(doubleValue);
progressBar.progressProperty().bind(task.progressProperty());
新线程(任务).run();
}
然后我在控制器上创建一个新线程,从那里我必须更新ProgersBar

this.timer=Executors.newSingleThreadScheduledExecutor();
this.timer.scheduleAtFixedRate(someFunction(),0,33,TimeUnit.millides);
someFunction(){
...
CreateProgerStask(双值);
}
我得到了一个例外

线程“pool-2-thread-1”2中出现异常 java.lang.IllegalStateException:不在FX应用程序线程上;currentThread=pool-2-thread-1


我做错了什么?非常感谢的任何帮助

使用Platform.runLater(Runnable)解决

//控制器
public void updateRogersBar(双重值){
Platform.runLater(新的Runnable(){
@凌驾
public void run(){
progressBar.setProgress(doubleValue);
}           
});     
}

这是否回答了您的问题?请..通常不需要:将progressBar.progress绑定到task.progressProperty(保证在fx应用程序线程上更新)应按原样工作。很可能,您没有显示的代码中还有其他错误;)