如何在javafx中返回任务并用于更新progressbar
我正在尝试更新一个如何在javafx中返回任务并用于更新progressbar,java,javafx,Java,Javafx,我正在尝试更新一个ProgressBar,它被添加到javafx中的一个单独阶段。我在一个名为messagemerge()的方法中定义了任务,并从那里调用了一个包含此任务的新线程。每次我尝试使用方法messagemerge()返回给main的任务时,它都会抛出一个NullPointerException 这就是我尝试过的 ProgressBarDialog progressBarDialog=new ProgressBarDialog(); Task<Void> task=messa
ProgressBar
,它被添加到javafx
中的一个单独阶段。我在一个名为messagemerge()
的方法中定义了任务,并从那里调用了一个包含此任务的新线程。每次我尝试使用方法messagemerge()
返回给main的任务时,它都会抛出一个NullPointerException
这就是我尝试过的
ProgressBarDialog progressBarDialog=new ProgressBarDialog();
Task<Void> task=messageMerge();
progressBarDialog.progressBar.progressProperty().bind(task.progressProperty());
progessBarDialog
是另一个定义如下的类
public class ProgressBarDialog {
public ProgressBar progressBar=null;
public ProgressBarDialog()
{
Stage progressDialog=new Stage();
progressDialog.initModality(Modality.APPLICATION_MODAL);
ProgressBar progressBar=new ProgressBar();
progressBar.setProgress(0);
BorderPane progressPane=new BorderPane();
progressPane.setCenter(progressBar);
progressDialog.setScene(new Scene(progressPane,500,100));
progressDialog.show();
}
NullPointerException
在我尝试从主目录访问task.progressProperty()
时发生。有人能帮我一下吗。感谢您的帮助。怎么了
这只是一个逻辑错误,您没有初始化progressBar成员变量,它总是空的。当您尝试使用progressBar成员时,会得到一个NullPointerException
本质上,您是progressBar变量,在不同的范围内重新定义它,因此您的原始变量永远不会被赋值
如何修复
要解决此问题,请替换以下行:
ProgressBar progressBar=new ProgressBar()
与:
不相关,但样本中存在可疑代码
顺便说一句,messageMerge函数中的任务使用情况看起来也很可疑,您可能应该在本地向方法声明任务(尽管这不太可能是NullPointerException的来源)。massageMerge正在返回一个任务,因此通常不需要在函数中将类成员变量设置为相同的值(因为调用代码可以只使用从massageMerge函数返回的值)
而不是:
task=new Task<Void>() { ...
task=newtask(){。。。
您可能想要:
Task<Void> task=new Task<>() { ...
Task Task=new Task(){。。。
替代实现
您不需要自己编写ProgressDialog,您可以使用,也可以使用第三方
注意正确设置通道的窗口所有权
无论哪种方式,您都可能需要注意。出了什么问题
这只是一个逻辑错误,您没有初始化progressBar成员变量,并且该变量始终为空。当您尝试使用progressBar成员时,会得到一个NullPointerException
本质上,您是progressBar变量,在不同的范围内重新定义它,因此您的原始变量永远不会被赋值
如何修复
要解决此问题,请替换以下行:
ProgressBar progressBar=new ProgressBar()
与:
不相关,但样本中存在可疑代码
顺便说一句,messageMerge函数中的任务使用情况看起来也很可疑,您可能应该在本地向方法声明任务(尽管这不太可能是NullPointerException的来源).massageMerge正在返回任务,因此通常不需要在函数中将类成员变量设置为相同的值(因为调用代码可以只使用从massageMerge函数返回的值)
而不是:
task=new Task<Void>() { ...
task=newtask(){。。。
您可能想要:
Task<Void> task=new Task<>() { ...
Task Task=new Task(){。。。
替代实现
您不需要自己编写ProgressDialog,您可以使用,也可以使用第三方
注意正确设置通道的窗口所有权
无论哪种方式,您都可能需要注意。出了什么问题
这只是一个逻辑错误,您没有初始化progressBar成员变量,并且该变量始终为空。当您尝试使用progressBar成员时,会得到一个NullPointerException
本质上,您是progressBar变量,在不同的范围内重新定义它,因此您的原始变量永远不会被赋值
如何修复
要解决此问题,请替换以下行:
ProgressBar progressBar=new ProgressBar()
与:
不相关,但样本中存在可疑代码
顺便说一句,messageMerge函数中的任务使用情况看起来也很可疑,您可能应该在本地向方法声明任务(尽管这不太可能是NullPointerException的来源).massageMerge正在返回任务,因此通常不需要在函数中将类成员变量设置为相同的值(因为调用代码可以只使用从massageMerge函数返回的值)
而不是:
task=new Task<Void>() { ...
task=newtask(){。。。
您可能想要:
Task<Void> task=new Task<>() { ...
Task Task=new Task(){。。。
替代实现
您不需要自己编写ProgressDialog,您可以使用,也可以使用第三方
注意正确设置通道的窗口所有权
无论哪种方式,您都可能需要注意。出了什么问题
这只是一个逻辑错误,您没有初始化progressBar成员变量,并且该变量始终为空。当您尝试使用progressBar成员时,会得到一个NullPointerException
本质上,您是progressBar变量,在不同的范围内重新定义它,因此您的原始变量永远不会被赋值
如何修复
要解决此问题,请替换以下行:
ProgressBar progressBar=new ProgressBar()
与:
不相关,但样本中存在可疑代码
顺便说一句,messageMerge函数中的任务使用情况看起来也很可疑,您可能应该在本地向方法声明任务(尽管这不太可能是NullPointerException的来源).massageMerge正在返回任务,因此通常不需要在函数中将类成员变量设置为相同的值(因为调用代码可以只使用从massageMerge函数返回的值)
而不是:
task=new Task<Void>() { ...
task=newtask(){。。。
您可能想要:
Task<Void> task=new Task<>() { ...
Task Task=new Task(){。。。
替代实现
您不需要自己编写ProgressDialog,您可以使用,也可以使用第三方
注意安全