2014-12-31 1 views
0

У меня проблема с litle.JavaFX FileRader читает строки gui show counter

здесь Лил немного моего кода

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, то будет иметь, чтобы показать мне, сколько строк в моем текстовом файле.

это работает отлично, но его не жить, обновления графического интерфейса после работы, перед тем, как графический интерфейс Freezy ..

, как я могу это исправить в задаче?

i'm новичок :(

и простите за мой Englisch

коротких снова:.

я 1 ярлык filechooser то будет загрузить текстовый файл наклейку должны показать, сколько линии чтения после каждой строки

ответ

2

Смотрите вопрос и мой ответ здесь: Display progress bar while compressing video file

JavaFX - это инструментарий с одним потоком GUI, и если вы выполняете долгое задание в потоке графического интерфейса пользователя, он замерзнет. Поэтому вы должны переместить чтение файла в фоновое задание, как описано в связанном вопросе.


Edit: Пример решения скелет

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; 
    } 

} 
+0

Если связанный ответ отвечает на вопрос, то вы должны голосовать, чтобы закрыть его как дубликат или оставить комментарий – MadProgrammer

+0

@MadProgrammer на основе вопрос я был готов написать (еще раз) полное решение в качестве ответа, потому что, похоже, он не понимал многие из рассматриваемых концепций. Но, вообще говоря, вы правы;) – eckig

+0

Добавлено скелетное решение, потому что у меня хорошее настроение. – eckig