我有一个小问题。
这是我的代码
package email;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.FileChooser;
public class Controller {
@FXML
public static Label daten;
@FXML
public static Button Datei;
@FXML
public TextField Trennzeichen;
static int i = 0;
@FXML
public void Datei(ActionEvent event) throws IOException, InterruptedException {
FileChooser fileChooser = new FileChooser();
File file = fileChooser.showOpenDialog(null);
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
fileChooser.getExtensionFilters().add(extFilter);
String[] buffer = new String[9];
String[][] data = new String[2000][9];
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String zeile = reader.readLine();
while (zeile != null) {
if ((zeile.substring(0, 1).equals("I")) || (zeile.substring(0, 1).equals("-"))) {
System.out.println("ha");
} else {
buffer = zeile.split(Trennzeichen.getText());
for (int t = 0; t < buffer.length; t++) {
data[i][t] = buffer[t];
}
++i;
daten.setText("" + i);
}
zeile = reader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我的 GUI 上有一个标签,它必须显示我的 txt 文件中有多少行。
这工作正常,但它不是实时的,工作后 gui 更新,之前是 gui 卡住..
如何在任务中解决这个问题?
再次简短:
我有 1 个标签 文件选择器,加载 txt 文件 标签必须显示每行之后正在读取多少行
最佳答案
请在此处查看问题和我的答案:Display progress bar while compressing video file
JavaFX 是一个单线程 GUI 工具包,如果您在 GUI 线程上执行长时间运行的任务,它将卡住。因此,您应该将文件读取移至后台任务,如链接问题中所述。
<小时/>编辑:示例骨架解决方案
public void readFile() {
Label counter = new Label();
ReadFileTask task = new ReadFileTask();
counter.textProperty().bind(task.progressProperty().asString());
new Thread(task).start();
}
public class ReadFileTask extends Task<Void> {
@Override
protected Void call() throws Exception {
File file = new File(pathname); //TODO
long lines = Files.lines(file.toPath()).count();
long line = 0;
BufferedReader reader = new BufferedReader(new FileReader(file));
String zeile = null;
while ((zeile = reader.readLine()) != null) {
//TODO do the work
updateProgress(line++, lines);
}
return null;
}
}
关于JavaFX FileRader 读取行 gui 显示计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725991/