gpt4 book ai didi

java - 如何返回任务并用于更新 javafx 中的进度条

转载 作者:行者123 更新时间:2023-12-01 22:09:52 26 4
gpt4 key购买 nike

我正在尝试更新添加到 javafx 中单独阶段的 ProgressBar。我在名为 messagemerge() 的方法中定义了任务,并从那里调用包含该任务的新线程。每次我尝试使用 messagemerge() 方法返回到 main 的任务时,它都会抛出 NullPointerException

这是我尝试过的

ProgressBarDialog progressBarDialog=new ProgressBarDialog();
Task<Void> task=messageMerge();
progressBarDialog.progressBar.progressProperty().bind(task.progressProperty());

以上代码写在main中

方法messageMerge()定义如下

public Task<Void> messageMerge() throws Exception
{
task=new Task<Void>(){
protected Void call()throws Exception{
for(i=0;i<50;i++)
updateProgress(i,50);
}
return null;
};
Thread thread=new Thread(task);
thread.start();
return task;
}

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();

}
当我尝试从 main 访问 task.progressProperty() 时,会发生

NullPointerException 。有人可以帮我解决这个问题吗?如有任何帮助,我们将不胜感激。

最佳答案

出了什么问题

这只是一个逻辑错误,您没有初始化 ProgressBar 成员变量,它始终为 null。当您尝试使用 ProgressBar 成员时,您会收到 NullPointerException。

本质上,你是"shadowing"通过在不同的作用域中重新声明 ProgressBar 变量,因此您的原始变量永远不会被分配值。

如何修复

要解决此问题,请替换以下行:

ProgressBar progressBar=new ProgressBar()

与:

progressBar=new ProgressBar() 

示例中存在不相关但可疑的代码

顺便说一句,您的 messageMerge 函数中的任务使用看起来也很可疑,您可能应该在您的方法本地声明该任务(尽管这不太可能是 NullPointerException 的来源)。 MassageMerge 正在返回一个任务,因此您通常不需要在函数内将类成员变量设置为相同的值(因为您的调用代码可以只使用从 MassageMerge 函数返回的值)。

而不是:

task=new Task<Void>() { ...

您可能想要:

Task<Void> task=new Task<>() { ...

替代实现

您不需要自己编写 ProgressDialog,您可以使用 Makery progress dialog example based on only the JavaFX APIs ,或者您可以使用第三方 ControlsFX ProgressDialog

请注意正确设置 Modality 的窗口所有权

无论哪种方式,您可能都想关注Window Modality

关于java - 如何返回任务并用于更新 javafx 中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32022191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com