2014-12-31 38 views
0

我有一個小問題。JavaFX FileRader read lines 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一個標籤,這就是要告訴我有多少行是在我的txt文件。

能正常工作,但工作後的不住時,GUI更新,之前是GUI freezy ..

我怎樣才能在任務中解決這個問題?

i'm新手:(

和對不起我的englisch

再次短:

我已經1個標籤 文件選擇多數民衆贊成在加載一個txt文件 標籤都顯示有多少行正在讀取每行之後

回答

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

} 
+0

如果鏈接的答案回答了這個問題,那麼你應該投將其關閉爲重複或將其作爲評論 – MadProgrammer

+0

@MadProgrammer基礎上,問題我已準備好(再次)寫出完整的解決方案作爲答案,因爲他似乎並沒有把握很多涉及的概念。但總的來說,你是對的;) – eckig

+0

添加骨架解決方案,因爲我心情很好。 – eckig