在方法javafx

时间:2015-05-13 13:51:25

标签: java javafx

我做了一个进度条,它完美无缺。唯一的问题是我想显示进度百分比。首先是一些背景信息:Netwerk逐行读取一个大文件(= bestand),每次读取一行计数器上升1.所以我想得到的百分比是(counter / 1380)* 100,1380是扫描仪读入的行数。当我运行它时,Netwerk在进度条运行时读入文件,当扫描仪准备就绪时进度条停止(因此这很有效)。但百分比不升级。当我调试时,我发现在Netwerk完成读取后调用updateprogress,因此百分比保持在-100%。有人有解决方案吗?

                    Task<Integer> task = new Task<Integer>() {
                    @Override
                    public Integer call() throws Exception {
                        n = new Netwerk(bestand);
                        updateProgress(((n.getTeller()/1380)*100), 100);
                        return null;
                    }

                };

                pb = new ProgressBar();
                pb.progressProperty().bind(task.progressProperty());
                Label lg = new Label();
                lg.textProperty().bind(Bindings.format("Even geduld... %.0f%%", 
                task.progressProperty().multiply(100)));
                task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {

                    @Override
                    public void handle(WorkerStateEvent event) {

                        progressStage.close();
                        SaveStage = new Stage();
                        //initStage
                    }
                });
                new Thread(task).start();

所以会发生的事情是我有一个带有任务的线程,即任务; 1.制作一个Netwerk,读取文件并递增计数器(我测试了计数器,它的工作原理) 2. Updateprogress()更新计数器已经很好了

然后我将任务绑定到进度条,然后用textProperty绑定标签。问题是标签没有更新。

enter image description here

1 个答案:

答案 0 :(得分:0)

将变量定义为类的属性

class YourClass { 
    private volatile int percentage;

在您开始ProgressBar时初始化它,并在Task内分配:

Task task = new Task<Integer>() {
@Override
public Integer call() throws Exception {
    n = new Netwerk(bestand);

    // assign here the percentage variable
    percentage = n.getPercentage();

    if (n.getTeller() == 1380) {
        return null;
    }
    return null;
}