首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaFX问题- ProgressBar (不能从静态内容引用非静态字段'progressBar‘)

JavaFX问题- ProgressBar (不能从静态内容引用非静态字段'progressBar‘)
EN

Stack Overflow用户
提问于 2018-10-05 11:17:34
回答 2查看 107关注 0票数 0

我正在创建一个读取CSV文件(文章编号)并搜索网页(例如asdfjh.com/12547.hmtl、asdfjh.com/12548.hmtl、asdfjh.com/12549.hmtl、asdfjh.com/12550.hmtl)的程序。

其目的是获取站点上的eans并将其添加到CSV文件中。我遇到了一个我不明白的问题。

代码:

package beginnDesignUndFunktion.code;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ProgressBar;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import java.io.File;
import java.io.IOException;

public class DesignController {
    static File file;

    @FXML
    ProgressBar progressBar = new ProgressBar();

    @FXML
    protected void handleButtonAction(ActionEvent event) {
        FileChooser chooser = new FileChooser();
    chooser.setTitle("Open File");
    file = chooser.showOpenDialog(new Stage());
    System.out.println(file.toString());
    try {
        int anzahl = CsvVerabeitung.countLines(file.toString());
        System.out.println(anzahl + " Dateien");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@FXML
protected void handleSubmitButtonAction(ActionEvent event) {
    String path = file.toString();
    Reader.read(path);
    Writer.write();
    }

    @FXML
    protected static void setProgress(int y){
        int anzahl = 0;
        try {
            anzahl = CsvVerabeitung.countLines(file.toString());    
        } catch (IOException e) {
            e.printStackTrace();
        }
        double progress = ((double) y) / ((double) anzahl);
        System.out.println(progress);
        progressBar.setProgress(progress);
    }
}

与其他类的通信是有效的。我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-10-07 07:42:54

好的,现在是这样的:

package beginnDesignUndFunktion.code;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ProgressBar;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import java.io.File;
import java.io.IOException;

public class DesignController {
    File file;
    CsvVerabeitung c = new CsvVerabeitung();
    Reader r = new Reader();
    Writer w = new Writer();

    @FXML
    ProgressBar progressBar = new ProgressBar();

    @FXML
    protected void handleButtonAction(ActionEvent event) {
        FileChooser chooser = new FileChooser();
        chooser.setTitle("Open File");
        file = chooser.showOpenDialog(new Stage());
        System.out.println(file.toString());
        try {
            int anzahl = c.countLines(file.toString());
            System.out.println(anzahl + " Dateien");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @FXML
    protected void handleSubmitButtonAction(ActionEvent event) {
        String path = file.toString();
        r.read(path);
        w.write();
    }

    protected void setProgress(int y){
        int anzahl = 0;
        try {
            anzahl = c.countLines(file.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        double progress = ((double) y) / ((double) anzahl);
        System.out.println(progress);
        progressBar.setProgress(progress);
    }
}

和:

package beginnDesignUndFunktion.code;

import java.io.IOException;

public class Writer extends DesignController{

    Reader r = new Reader();
    CsvVerabeitung c = new CsvVerabeitung();
    DesignController d = new DesignController();

    protected void write() {
        Reader r1 = new Reader();
        String path = "C:\\Users\\marco\\Desktop\\CSV Verarbeitung\\src\\beginnDesignUndFunktion\\data\\test7Files2.csv";
        java.io.BufferedWriter FileWriter;

        {
            try {
                FileWriter = new java.io.BufferedWriter(new java.io.FileWriter(new java.io.File(path)));
                FileWriter.write("id;ean");
                int i=0;
                for(String x: r.number){
                    FileWriter.append("\n" + r.number.get(i) + ";" + r.ean.get(i) + ";");
                    i++;
                    d.setProgress(i);
                }
                FileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

现在的问题: java.lang.StackOverflowError

如何为本网站制作:DDDD

真让人忍俊不禁!

btw @kleopatra:将锁定约定。@slaw: progressBar不工作,它是静态的。

编辑

The problem is the d.setProgress(i); call.
票数 0
EN

Stack Overflow用户

发布于 2018-10-07 12:01:15

不愉快地解决了..。

复制Writer-Class的代码并将其放入Controller-Class中。

这不是一个很好的解决方案,但它是可行的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52657893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档