使用参数更新JavaFXProgressBar
我的JavaFx应用程序上有一个Progressbar。我需要从另一个线程更新它。该线程必须提供progers值 我的代码如下所示 //任务类使用参数更新JavaFXProgressBar,java,multithreading,javafx,Java,Multithreading,Javafx,我的JavaFx应用程序上有一个Progressbar。我需要从另一个线程更新它。该线程必须提供progers值 我的代码如下所示 //任务类 public类UpdateProgressBarTask扩展任务{ 私人双重价值; 公共UpdateProgressBarTask(双值){ 这个.progressValue=value; } @凌驾 受保护的Void调用()引发异常{ this.updateProgress(this.progressValue,100); 返回null; } } /
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应用程序线程上更新)应按原样工作。很可能,您没有显示的代码中还有其他错误;)