我有一个小问题。
这是我的代码中的一小部分
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 freezy ..
我如何在任务中修复此问题?
我是新手:(
抱歉我的英语。
再次简短:
我有1个标签 filechooser即加载txt文件 标签必须显示每行后读取的行数
答案 0 :(得分:2)
请在此处查看问题和答案: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;
}
}